QT学习中遇到的问题!!!

xiaoxiao2021-02-28  128

1,当Qt程序加载完成,编译运行后显示一个错误   QDialog; No such file or directory :

解决方法:

          在.pro中加QT+=widgets

2,

QT在主对话框form1调用子对话框form2

 

1. 首先,在QT Designer上设计form2.ui并保存,打开查看源代码并保存成ui_form2.h;

2. 将form2.ui和ui_form2.h加载到工程中; 3. 在工程中给form2.ui添加类文件,分别是form2.h和form2.cpp.具体程序怎么写参照form1.h和form1.cpp,只要将CMainWnd改成CDialog就行。 4. 在form1.h中: class form :    public QMainWindow { Q_OBJECT ...... public slots: void onButtonClicked(); ....... } 5. 在form1.cpp中: form2::form2(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { connect(ui.button,SIGNAL(clicked()),this,SLOT(onButtonClicked)); } void form1::onButtonClicked() { form2 f; f.exec(); // 模式调用 } 为什么要用模式调用方法? 用非模式调用方法,f.show();调用的form2对话框一闪而过,刚开始以为是由于局部变量的缘故,后来发现不是。详细看这段话: “因为新手,不清楚Qt是怎么处理窗口或者QWidget的show和exec()函数的,看文档上说show是显示出这个QWidget和它的子类,exec()是对于对话框来说,显示一个模态对话框,如果对话框是一个application model那么在关闭这个对话框这前,不同对本程序的任何其它窗口交互,如果对话框是一个window model,它只是阻塞对它父窗口的交互, 不是因为局部变量的问题,如果程序中已经有一个QMainWindow后,想再显示一个QMainWindow呢,它没有exec,这时新建的QMainWindow必须对动态分配内存的方法声明,new QMainWindow然后再调用它的show方法就可以了, 个人认为可以是内存分配的问题,主窗口(程序的第一个窗口,可以分配在堆上,也可以分配在堆栈上),但后来的窗口(包括对话框,必须分配在堆上(对于show()方法来说)) 如果对话框是调用的exec()方法,刚可以在堆堆栈上创建。 【参考】http://bbs.suda123.com/Archiver/webbiancheng/thread-226619-1.html” 3,

转载请注明原文地址: https://www.6miu.com/read-39853.html

最新回复(0)