Qt5:动态对话框

论坛 期权论坛 脚本     
匿名技术用户   2020-12-29 23:09   21   0

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

转载于:https://www.cnblogs.com/wowk/archive/2013/06/01/3113121.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP