Qt5:动态对话框

时间:2022-04-02 23:13:51

动态对话框实现也比较容易 , 也是使用  QtDesigner  设计好 用户界面  ,获得  *.ui  文件

但是  此时 不是用 setupUi  来  将设计好的用户界面应用到窗口上  而是  使用 QUiLoader  类  通过   *.ui  文件动态创建一个窗口

这样 , 就可以在程序运行过程中动态的更换窗口界面了

实例代码

  

 1     QApplication a(argc, argv);
2 QUiLoader uiloader;
3 QWidget* dlg = new QWidget;
4
5 QFile file1("mainwindow.ui");
6 file1.open(QFile::ReadOnly);
7 dlg = uiloader.load(&file1);
8 dlg->show();

 

这样生成的窗口中 , 要想访问窗口的界面元素 (就是窗口中的子窗口部件) ,就要通过一下手段

QComboBox *  primaryColumnCombo  =   dlg->findChild<QComboBox *>( "primaryColumnCombox");
if(primaryColumnCombo == NULL){

  //..........................错误处理....................

}

 

但是  在  VC6  中 , 由于受编译器的限制 ,QObject::findChild<T>   这个函数不能使用   ,   为了解决这个问题

可以调用   qFindChild <T>  这个全局函数  ,  用法和  QOBject::findChild<T>  相同

(Qt5 的文档中找不到 qFindChild 这个函数  只能找到一个  qFindChildren  函数  可以尝试用这个函数替换)

 

 

注意 :  在编译程序前   在 *.pro  文件中 加入   CONFIG += uitools   这一句

这是因为 QUiLoader 是放在Qt的一个独立库中的 , 要是用这个库就要加上这一句

但是 在  Qt5 中 ,  已经不赞成   添加  CONFIG += uitools 了

推荐的做法是  添加  Qt   +=  uitools