1 搭建实验环境-----目的是 将 QDialog 类转变为 QWidget类
a 使用qt creator 创建项目工程 Dialog_to_Widget, 主界面用 MainWindow类,另外2个界面用QDialog类和QWidget类。
b 在主界面上创建2个pushButton ,DialogpushButton 和Widget pushButton ,主要用于弹出Dialog 和Widget界面。
界面如下:
2 现在开始将Dialog改为QWidget类
3 编译一下,报错
C:\Users\Lion\Desktop\1\Dialog_to_Widget-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK____\..\Dialog_to_Widget\dialog.cpp:8: 错误:no matching function for call to 'Ui::Dialog::setupUi(Dialog* const)'
4 注销掉 dialog.cpp 的这行
// ui->setupUi(this);
5 编译过了,但是Dialog 不出界面,Widget可以。
6 修改ui_dialog.h 文件
void setupUi(QDialog *Dialog) -----> void setupUi(QWidget *Dialog)
void retranslateUi(QDialog *Dialog)-----> void retranslateUi(QWidget *Dialog)
7 启用步骤 4 , ui->setupUi(this);
8 编译运行,出现如下情况
Dialog 内嵌在 MainWindow内,如果你先点Dialog 那么Widget不能点。
9 解决方法
源代码
void MainWindow::on_DialogpushButton_clicked()
{
Dialog *d=new Dialog(this);
d->show();
}
改为
void MainWindow::on_DialogpushButton_clicked()
{
Dialog *d=new Dialog; //原因Dialog现在已经是QWidget类了
d->show();
}
10 编译运行--已经成功变为QWidget, 注意观察Dialog 有最小化,最大化 关闭框
11 如果要拿到 QT+VS2010环境中编译,打开vs2010,选择Qt插件打开刚才的工程 *.pro文件。
出现如下错误
1>dialog.cpp(8): error C2664: “Ui_Dialog::setupUi”: 不能将参数 1 从“Dialog *const ”转换为“QDialog *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
解决方法: 重复步骤6就可以啦,或者将先前的ui_dialog.h文件覆盖当前的,如果你重新生成要再次修改。