如何将QMainWindow更改为QDialog

时间:2016-01-20 01:21:15

标签: qt

我是Qt的新人。我在Qt做了一个项目。 现在我需要将QMainWindow更改为QDialog。 如何在不删除所有项目的情况下执行此操作? 如果将基本主窗口更改为QDialog,是否需要为主要窗口创建一个新窗口?

2 个答案:

答案 0 :(得分:3)

取决于您是否有.ui文件。

如果是这样,您可以编辑.ui并更改行

<widget class="QMainWindow" name="MainWindow">

<widget class="QDialog" name="MainWindow">

另外,请考虑项目中是否需要QMenuBarQToolBarQStatusBar等类。 Qt Designer默认将它们放在.ui文件中,因为它们由QMainWindow使用。

之后,您应该更改MainWindow的基类。你应该有这样的东西:

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{

因此,您需要按QMainWindow更改QDialog

#include <QDialog>

namespace Ui {
class MainWindow;
}

class MainWindow : public QDialog
{

如果您没有.ui文件,则第一步没有必要(显然:))

当然,您需要检查是否使用了QMainWindow未实现的任何QDialog方法,以避免编译错误和功能缺失。

答案 1 :(得分:1)

您可以自由使用任何类型的QWidget作为主要内容。主窗口是您决定使用的窗口,通常是您在main()函数中创建和显示的窗口。因此,您可以自由地将基类更改为QDialog,它可能只会起作用。

但是,如果您使用Qt Designer(直接或通过Qt Creator)创建包含所有小部件的.ui文件,而不是手动编码界面,并且您不想经历那个麻烦再次,它可能有点棘手。

一种方法是创建一个新的QDialog,然后只需将设计的窗口内容复制粘贴到新窗口即可。这是最简单的方法,但您可能会丢失一些在设计器中设置的属性,因为并非所有内容都被复制。

更棘手,但也更强大的方法是手动编辑创建的.ui文件。毕竟,它只是一个简单的XML文件。查找class属性并将class="QMainWindow"更改为class="QDialog"。您还应该查看属性并通过查看文档来检查QDialog中是否定义了这些属性。如果它们是特定于QMainWindow的,那么只需仔细删除它们。

当然,您应该在使用XML之前备份您的项目(或将其提交到源代码管理系统),因为您可能会搞砸某些内容,以便设计的内容只会删除无法解析的部分文件