Qt 如何将模板从窗口小部件更改为主窗口?

Qt 如何将模板从窗口小部件更改为主窗口?,qt,Qt,启动应用程序时,我在Qt Designer中选择了错误的模板 我做了文件->新建->小部件 现在我需要一份菜单。所以,我想我需要主窗口模板 我可以无缝更改模板,还是必须创建新表单并将所有内容添加到模板上?我在两个文件中进行了三行编辑,才将QWidget模板更改为QMainWindow 刚才在Qt 4.8.4中,我做了以下工作: 我在Qt Creator外部打开了ui文件(在Qt Creator中关闭后),并在文件中编辑了一行: 编辑:备份您正在处理的内容,因为编辑ui文件有点不洁,可能会产生奇怪

启动应用程序时,我在Qt Designer中选择了错误的模板

我做了文件->新建->小部件

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


我可以无缝更改模板,还是必须创建新表单并将所有内容添加到模板上?

我在两个文件中进行了三行编辑,才将
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>

小装置
0
0
400
300
小装置
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
#ifndef小部件
#定义小部件
#也包括//编辑了这一行
名称空间用户界面{
类控件;
}
类小部件:publicqmainWindow//编辑了这一行。
{
Q_对象
公众:
显式小部件(QWidget*parent=0);
~Widget();
私人:
Ui::Widget*Ui;
};
#endif//WIDGET\u H
最终结果:现在QT创建者/设计器允许我在右QualWindows的空白区域右击右键添加工具栏、菜单栏、状态栏等。


希望能有所帮助。

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

如果在.ui中编辑XML,那么将
QWidget
更改为
QMainWindow
是不够的。首先需要补充:

  <widget class="QWidget" name="centralwidget">

元素在所有窗口小部件或布局之前,紧跟其后

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

主窗口

元素(顺序可能不同)。并添加相应的标签
,用于最终关闭中心小部件元素-在关闭主小部件的元素之前
(在
之前)。这对我很有用。

使用设计器,您可能需要创建一个新表单,并将小部件复制粘贴到新表单上。通过修改窗口的类文件,您可以尝试对不同的小部件(如QDialog或QWidget)进行子分类,但这不会改变设计器处理小部件的方式。还有,这是Qt4.x还是Qt5.x?我不得不说,没有内置的方法来实现这一点是一个很大的烦恼。我明白这不是每天都会发生的事情,但人们会只做一次决定,并且总是正确的想法是。。。莫名其妙。在XML中将
QWidget
更改为
QMainWindow
,导致子元素消失。这在Qt5中是不够的。您还需要所做的更改。显然是因为有人在对
QMainWindow
下的小部件树的结构进行假设。我想补充一点,当更改为
QDockWidget
时,这一步骤也是必需的。