动态对话框实现也比较容易 , 也是使用  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

 

 

posted on 2013-06-01 21:26  wowk  阅读(1316)  评论(0编辑  收藏  举报