QT--信号与槽(2) 自定义对话框

x33g5p2x  于2021-11-24 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(280)

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

相关文章