2013-10-06 97 views
1

首先,我想提到我來自java背景。在主UI之外創建QMenu類

我正在設計我的第一個應用程序在QtCreator中,我想添加菜單。

我想在一個單獨的文件中創建一個QMenu小部件,以保持我的主UI窗口簡單而乾淨。

這可以通過在xml文件中定義QMenu,然後使用文件(加載)方法或類似方法將其包含在主.ui文件中。

但是在QT創建器中我找不到如何創建一個從QMenu繼承的新文件?

什麼是正確的做法呢?

我希望每個組件都簡單明確。所以UI將只是'主'方法入口點,它將繪製主窗口,幷包含初始菜單項,我打算顯示一個簡單的'歡迎'類型頁面,其中有一個菜單項連接到數據源。

我希望菜單內容根據數據類型(或者用戶正在使用的程序部分)而改變。我打算處理與用戶交互相關的不同文件中的這些不同菜單。

在此先感謝。

大衛

回答

3

我假設你想使用QMenuBar表示主菜單或QMainWindow的。 QMenu本身通常不會嵌入其他小部件中。

這是完全可能的。創建一個派生自QWidget的設計器窗體類。我們稱之爲My_menu。使用文本編輯器打開UI文件並將QWidget替換爲<widget class="QWidget" name="My_menu">行中的QMenuBar。您還可能需要刪除標題屬性和其他無法應用於QMenuBar的屬性。現在切換到CPP和H文件,並使您的類從QMenuBar而不是QWidget派生。

接下來,打開窗體編輯器中的主窗口UI,在對象樹中找到QMenuBar條目,然後在其上下文菜單中選擇「提升到」。輸入新的班級名稱並申請。它現在應該工作。

文件應該看起來像:

頁眉:

#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; 
} 

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> 
+0

謝謝,聽起來像一個路該如何走,我不知道'促進'選項。我會試一試。並回報 – DaveM