当我开始申请时,我在Qt Designer中选择了一个错误的模板。
我做了文件 - >新 - >窗口小部件。
现在我需要一个菜单。所以,我想我需要主窗口模板。
我可以无缝更改模板吗?或者我必须创建新表格并将所有内容加入其中?
答案 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的空白区域。
希望有所帮助。