2016-01-20 51 views
2

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

回答

1

您可以自由使用任何类型的QWidget为主。主窗口是您决定的任何内容,通常是您在main()函数中创建并显示的窗口。所以你可以自由地改变你的基类到QDialog,它可能会工作。但是,如果您使用Qt Designer(直接或通过Qt Creator)创建包含所有小部件的文件,而不是手工编写界面,并且您不想再次通过这种麻烦,它可能有点棘手。

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

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

当然,在使用XML之前,您应该备份您的项目(或将其提交给源代码管理系统),因为您可能会搞砸一些东西,以至于设计时会简单地删除部分文件,解析。

+0

当我看到您自己的答案时,我已经准备好了我的答案。那么,我认为这两个都很有趣:)你的很好。谢谢;) – Tarod

+0

@塔罗德,我忘了菜单栏,状态栏和其他这样的事情。另一方面,你没有提到不兼容的属性(尽管我不确定这甚至是一个问题,也许Designer/UIC会忽略它们)。 –

+0

再次感谢您的留言。我赞成你,因为我认为你的回答非常好。保重! – Tarod

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 
{ 

所以你需要通过QDialog改变QMainWindow

#include <QDialog> 

namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QDialog 
{ 

如果没有.ui文件,第一个步骤是没有必要的(显然:))

当然,你需要检查,如果你使用任何QMainWindow方法是不由QDialog执行,以避免编译错误和功能缺失。