Qt开发:如何将QDialog 类转换为QWidget

时间:2024-05-20 17:34:56

http://blog.****.net/taoerit/article/details/30317959?locationNum=7&fps=1


1     搭建实验环境-----目的是 将 QDialog 类转变为 QWidget类  

       a  使用qt creator 创建项目工程 Dialog_to_Widget, 主界面用  MainWindow类,另外2个界面用QDialog类和QWidget类。

       b  在主界面上创建2个pushButton ,DialogpushButton 和Widget pushButton ,主要用于弹出Dialog 和Widget界面。

        界面如下:

       Qt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为QWidget


2 现在开始将Dialog改为QWidget类


Qt开发:如何将QDialog 类转换为QWidgetQt开发:如何将QDialog 类转换为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不能点。

Qt开发:如何将QDialog 类转换为QWidget


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 有最小化,最大化 关闭框


Qt开发:如何将QDialog 类转换为QWidget


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文件覆盖当前的,如果你重新生成要再次修改。Qt开发:如何将QDialog 类转换为QWidget