1

首先我想提一下我来自java背景。

我正在 QtCreator 中设计我的第一个应用程序,我想向它添加菜单。

我想在一个单独的文件中创建一个 QMenu 小部件,以保持我的主 UI 窗口简单和干净。

这可以通过在 xml 文件中定义 QMenu,然后使用 file(load) 方法或类似方法将其包含在主 .ui 文件中来实现。

但是在 QT 创建者中,我找不到如何创建一个继承自 QMenu 的新文件?

正确的方法是什么?

我希望每个组件都简单而具体。

所以 UI 将只是“主”方法的入口点,它将绘制主窗口,并包含初始菜单项,我打算显示一个简单的“欢迎”类型页面,该页面有一个连接到数据源的菜单项。

我希望菜单内容会根据数据类型(或者更确切地说是用户正在使用的程序部分)而改变。我打算在与用户交互相关的不同文件中处理这些不同的菜单。

提前致谢。

大卫

4

1 回答 1

3

我假设您想使用代表主菜单或 QMainWindow 的 QMenuBar。QMenu 本身通常不嵌入到其他小部件中。

这是很有可能的。创建从 QWidget 派生的设计器表单类。让我们称之为My_menu。使用文本编辑器打开 UI 文件并将 QWidget 替换为 QMenuBar 行<widget class="QWidget" name="My_menu">。您可能还需要删除无法应用于 QMenuBar 的 title 属性和其他属性。现在切换到 CPP 和 H 文件,并使您的类从 QMenuBar 派生而不是 QWidget。

接下来,在表单编辑器中打开主窗口 UI,在对象树中找到 QMenuBar 条目,然后在其上下文菜单中选择“Promote to”。输入您的新班级名称并申请。它现在应该可以工作了。

文件应如下所示:

标题:

#include <QMenuBar>

namespace Ui {
class My_menu;
}

class My_menu : public QMenuBar
{
  Q_OBJECT

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

private:
  Ui::My_menu *ui;
};

资源:

My_menu::My_menu(QWidget *parent) :
  QMenuBar(parent),
  ui(new Ui::My_menu)
{
  ui->setupUi(this);
}

My_menu::~My_menu()
{
  delete ui;
}

用户界面:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>My_menu</class>
 <widget class="QMenuBar" name="My_menu">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>135</width>
    <height>94</height>
   </rect>
  </property>
  <widget class="QMenu" name="menuC">
   <property name="title">
    <string>c</string>
   </property>
  </widget>
  <action name="actionA">
   <property name="text">
    <string>a</string>
   </property>
  </action>
  <action name="actionB">
   <property name="text">
    <string>b</string>
   </property>
  </action>
  <addaction name="actionA"/>
  <addaction name="actionB"/>
  <addaction name="menuC"/>
 </widget>
 <resources/>
 <connections/>
</ui>
于 2013-10-06T20:22:04.850 回答