如何将模板从Widget更改为主窗口?

时间:2013-06-03 17:28:41

标签: qt

当我开始申请时,我在Qt Designer中选择了一个错误的模板。

我做了文件 - >新 - >窗口小部件。

现在我需要一个菜单​​。所以,我想我需要主窗口模板。

我可以无缝更改模板吗?或者我必须创建新表格并将所有内容加入其中?

2 个答案:

答案 0 :(得分:4)

需要使用主窗口模板创建新的ui表单并将窗口小部件内容复制到其中,因为主窗口具有中央窗口小部件,如果我们不指定它,则会导致子元素消失,如上所述。

如果您在.ui中编辑XML,则将QWidget更改为QMainWindow是不够的。首先需要添加:

  <widget class="QWidget" name="centralwidget">
所有小部件或布局之前的

元素,紧跟在

之后
<property name="windowTitle">
   <string>MainWindow</string>
</property>

元素(顺序可能不同)。并且在关闭主要小部件</widget>的元素之前(在</widget><customwidgets>之前)添加通信标记<resources>以关闭中央小部件元素。这对我有用。

答案 1 :(得分:2)

我在两个文件中进行了三行编辑,将QWidget模板更改为QMainWindow

刚才在Qt 4.8.4中,我做了以下事情:

我在Qt Creator之外打开了ui文件(在Qt Creator中关闭之后),我在文件中编辑了一行:

编辑:备份你正在处理的内容,因为编辑ui文件有点犹豫不决,可能会产生奇怪的,未定义的反响。

widget.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QMainWindow" name="Widget"> <!-- This is the line I edited...
 "QMainWindow" was "QWidget".-->
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QMainWindow>// Edited this line, too

namespace Ui {
class Widget;
}

class Widget : public QMainWindow // Edited this line.
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

最终结果:现在Qt Creator / Designer允许我添加工具栏,菜单栏,状态栏等,只需右键单击现在QMainWindow的空白区域。

希望有所帮助。