QT–信号与槽(2) 自定义对话框
添加槽
在前面的项目中修改
项目:https://wwa.lanzoui.com/i5sCDwu30pa
添加一个对话框,添加qt设计ui–》dialog without buttons ,类名改为 MyDialog。
然后在ui中添加二个push Button 并且改名“进入主界面“和”退出程序“。
第二步:设计信号与槽
先实现“退出程序“ 的信号与槽
进入信号与槽的编辑模式
在退出程序按钮上按住鼠标左键,然后拖动到窗口上
配置连接
要想取消就按下槽,然后delete或者右键–删除
当然在信号与槽编辑区域也可以设置
编辑好后按 回到编辑widget界面
关于其他的可以到帮助的Qt Designer’s Signals and Slots Editing Mode 中查看
Qt Designer’s Signals and Slots Editing Mode
Qt Designer 的 Signals and Slots 编辑模式
现在写进入主界面按钮的信号与槽,在改按钮上右击–转到槽–选择clicked信号
写代码
void MyDialog::on_pushButton_clicked()
{
accept();
}
这个accept函数就是QDialog类中的一个槽,对于一个使用exec()函数实现的模态对话,执行这个槽就会隐藏这个模态对话框,并返回QDialog::Accpeted值,这里就是要使用这个值来判断是那个按钮被按下了。
与其对应的还有一个reject()槽,他可以返回一个QDialog::Rejected值。前面的退出程序也可以关联这个槽
在主界面使用自定义的对话框
更改main.cpp
#include "mywidget.h"
#include <QApplication>
#include "mydialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyWidget w;
MyDialog dialog;
if(dialog.exec()==QDialog::Accepted)
{
//如果是按下了"进入主界面"
w.show();
return a.exec(); //程序正常运行代码
}
else return 0;//退出程序代码
}
主函数中建立MyDialog对象,然后判断其exec()函数的返回值,如果按下了按钮,应该是QDialog::Accpeted,则显示主界面w,并且运行程序
主界面返回 重新登录按钮设计
下面在 主界面即widget.ui界面设计二个按钮push button,分别更改它们的显示文本为“重新登录”和“退出”。然后使用信号与槽模式将“退出”按钮的clicked()信号和Mywidget界面的close槽关联。完成重新登录按钮的clicked槽,并更改
void MyWidget::on_pushButton_clicked()
{
//先关闭mywidget,其实只是隐藏起来了,并没有真正退出,然后新建MyDialog对象
close();
//现在应该新建一个mydialog的对象 即MyDialog dlg;,显示重新登录
MyDialog dlg;
// 如果按下了“进入主窗口”按钮,则再次显示主界面
// 否则,因为现在已经没有显示的界面了,所以程序将退出
if(dlg.exec() == QDialog::Accepted) show();
}
close()并不是一定使程序退出,只有当只剩下最后一个主界面,就是没有父窗口,这时候调用close才能退出程序,而其他情况下界面只是隐藏起来了,并没有销毁。
源代码:
https://wwa.lanzoui.com/iQHoewumjcf