QT QPushButton点击事件的实现及关闭窗口命令

本文介绍了在QT中如何实现QPushButton的点击事件,通过重载mousePressEvent和mouseReleaseEvent,以及探讨了不同情况下关闭窗口的方法,包括QApplication::exit()、QDialog的accept()和reject(),以及QWidget的close()。
摘要由CSDN通过智能技术生成

最近需要对按钮实现效果:当鼠标按下时按钮有效果1,然后鼠标松开时按钮有效果2。

分析:这里没有现成的信号可以使用,需要重载mousePressEvent 及 mouseReleaseEvent 事件函数,在mouseReleaseEvent 函数中检查鼠标是否在按钮中,若是,则发送点击事件。以下为版本一实现:

void testbutton::mousePressEvent(QMouseEvent *e)
{
	//效果1实现代码
}

void testbutton::mouseReleaseEvent(QMouseEvent *e)
{
	//效果2实现代码

	//鼠标释放时如果仍在按钮内部,发送click信号,注意这里e->pos返回的是相对于按钮起始位置的位置
	if (this->bIsPointInRect(e->pos(), QRect(0, 0, this->width(), this->height())))
	{
		emit clicked();
	}
}

这样造轮子显然是不高效的,并且代码也比较丑陋,QPushButton继承自QAbstractButton,在QAbstractButton中有更好的mousePressEvent 及 mouseReleaseEvent 实现,可以发现鼠标点击事件的原理跟版本一是类似的。以下为版本二的实现:

vo
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于 Python 的 Qt 实现 UI 界面跳转,可以通过以下步骤实现: 1. 创建多个 UI 界面文件,例如 `login.ui`、`dashboard.ui` 等,并使用 Qt Designer 工具进行设计。 2. 使用 `pyuic5` 命令将 UI 界面文件转换为 Python 代码文件。例如,对于 `login.ui` 文件,可以使用以下命令将其转换为 `login_ui.py` 文件: ``` pyuic5 login.ui -o login_ui.py ``` 3. 在 Python 代码中导入转换后的 UI 界面代码,并使用 `QMainWindow` 类或 `QWidget` 类创建窗口对象。 4. 在窗口对象中添加按钮或其他控件,并为其设置点击事件。例如,对于登录页面,可以添加一个登录按钮,并在其点击事件中执行登录验证操作。 5. 在点击事件中,可以使用 `hide()` 方法隐藏当前窗口,并使用 `show()` 方法显示下一个窗口。例如,对于登录页面中的登录按钮,可以在其点击事件中执行以下代码: ```python def login_clicked(self): # 执行登录验证操作 if self.validate_login(): # 验证通过,隐藏当前窗口,并显示下一个窗口 self.hide() dashboard_window = DashboardWindow() dashboard_window.show() ``` 以下是一个简单的示例代码: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QLineEdit, QVBoxLayout, QWidget class LoginWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Login') self.username_label = QLabel('Username:') self.username_edit = QLineEdit() self.password_label = QLabel('Password:') self.password_edit = QLineEdit() self.password_edit.setEchoMode(QLineEdit.Password) self.login_button = QPushButton('Login') self.login_button.clicked.connect(self.login_clicked) layout = QVBoxLayout() layout.addWidget(self.username_label) layout.addWidget(self.username_edit) layout.addWidget(self.password_label) layout.addWidget(self.password_edit) layout.addWidget(self.login_button) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) def login_clicked(self): # 执行登录验证操作 if self.validate_login(): # 验证通过,隐藏当前窗口,并显示下一个窗口 self.hide() dashboard_window = DashboardWindow() dashboard_window.show() def validate_login(self): # 执行登录验证操作 return True class DashboardWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Dashboard') self.label = QLabel('Welcome to the dashboard!') layout = QVBoxLayout() layout.addWidget(self.label) widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) if __name__ == '__main__': app = QApplication([]) login_window = LoginWindow() login_window.show() app.exec_() ``` 在这个示例中,我们创建了两个窗口对象 `LoginWindow` 和 `DashboardWindow`,并在登录页面中添加了一个登录按钮。在登录按钮的点击事件中,我们执行登录验证操作,并在验证通过后,隐藏当前窗口,并显示下一个窗口。在目标页面中,我们添加了一个标签,并显示欢迎消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值