精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
近期安排实习员工开发QT下的对话框界面,他以前是按一个项目一个UI一个对话框模式工作,后来让他把几个界面UI的类集成到一个项目里时,遇到题目问题:QT对话框类找不到默认构造函数。
默认构造函数是和类同名且不带参数的构造函数,遇到这样的错误,理论上好解决,但是放到多个类的QT项目环境下,有些容易误导的因素会导致此问题发生。
在有2个对话框类时,在2个源文件里的代码使用类名有冲突造成。
把类名规划好。对话框类和UI类的类名要规划好,继类的命名也要对应。
QT的对话框类需要一个UI类,这个UI类可以用UIC来转换UI文件获取,但是转换出来的类名可能会和预想的不一样,一般需要手工修改,比如:
1、非命名空间内类名
QT_BEGIN_NAMESPACE class Ui_MainDialog
这里的Ui_MainDialog你要替换为有意义的其它名称。
2、命名空间内类名
namespace Ui { class MainDialog: public Ui_MainDialog {}; } // namespace Ui
这里的MainDialog和后面的基类你要替换为有意义的其它名称。注意public后面的名称要和第一步里自定义的名称对应,否则就会导致不对应,有编译错误。
3、对话框类里包含好头文件,ui成员的类型和头文件里规定的类一样
#include "ui_maindialog.h"//ui类对应的头文件 #include "fortunethread.h" class MDialog : public QDialog { Q_OBJECT public: explicit MDialog(FortuneThread*pthread); ~MDialog(); private slots: void userexit(); private: Ui::MainDialog ui;//成员的类型 FortuneThread*pmainthread; };