1. 程式人生 > >QT中三種構建選單欄的方法

QT中三種構建選單欄的方法

方法一:《C++ GUI programming with Qt 4, Second Edition》給出的一種方法:QMenum定義單個選單,呼叫menuBar()函式建立選單欄,再往選單欄裡新增子選單、Action或其他dialog.

.h

QMenu *file;

   QMenu *edite;

   QMenu *help;

   QMenu *submenu;

   QMenuBar *menubar;

   QMenuBar *my_menubar;

   QAction *openfile;

   QAction *createfile;

QAction*recentfiles;

.cpp

openfile = new QAction(tr("&open"), this);

   createfile = new QAction(tr("&newfile"), this);

   recentfiles = new QAction(tr("&recentfiles"), this);

    file = menuBar()->addMenu(tr("&file"));//QMainWindow::menuBar()返回一個QMenuBar的指標,第一次呼叫這個函式就會建立選單欄

   submenu = file->addMenu(tr("&submenu")); //新增子選單

   submenu->addAction(openfile);    //選單裡新增動作

   file->addAction(openfile);

   file->addAction(createfile);

   file->addAction(recentfiles);

  edite = menuBar()->addMenu(tr("&edite"));

  help = menuBar()->addMenu(tr("&help"));

方法二:

Qt中的彈出式選單用類 QPopupMenu表示,每一個選單需要編寫程式碼逐個加入。

QPopupMenu* file = new QPopupMenu;
file->insertItem("&Open", this, SLOT( openFile() ) );
file->insertItem("&Save", this, SLOT( saveFile() ) );
file->insertSeparator();
file->insertItem("&Quit", this, SLOT( exitMain() ) );

第一句構造出一個彈出式選單的例項,後面使用insertItem分別新增四條選單專案。insertItem有多種使用形式,上面是最常用的也是最簡單的一種。第一個引數表示選單文字,第二個和第三個引數表示接受選單事件的類和slot。需要注意的是insertItem()方法的第2,3個引數,這實際上是呼叫了connect()方法把選單被選擇這個事件和某個類的Slot()方法連線起來,這是很典型的用法。

方法三:

Qt參考文件給出了一個綜合性的方法,呼叫QMenuBar::insertItem()函式,其第二個引數是指向QPopupMenu類的指標

Example of creating a menu bar with menu items (from menu/menu.cpp):

       file->insertItem(p1, "&Open",  this,SLOT(open()), CTRL+Key_O );

        file->insertItem(p2, "&New", this, SLOT(news()), CTRL+Key_N );

       menu = new QMenuBar( this );

       menu->insertItem("&File", file );

In most main window style applications you would use themenuBar() provided inQMainWindow,addingQPopupMenusto the menu bar and addingQActionsto the popup menus.

       menuBar()->insertItem("&File", file );

       fileNewAction->addTo(file );

相關推薦

QT構建選單方法

方法一:《C++ GUI programming with Qt 4, Second Edition》給出的一種方法:QMenum定義單個選單,呼叫menuBar()函式建立選單欄,再往選單欄裡新增子選單、Action或其他dialog. .h QMenu *file;

Qt解析xml的方式

處理異常 AR ttr omd ostream odin move encoding efault 在下面的隨筆中,我會根據xml的結構,給出Qt中解析這個xml的三種方式的代碼。雖然,這個代碼時通過調用Qt的函數實現的,但是,很多開源的C++解析xml的庫,甚至很多其他語

Java Web開發Tomcat部署專案的方法(轉)

轉自:http://www.gowhich.com/blog/539 第一種方法:在tomcat中的conf目錄中,在server.xml中的,節點中新增: <Context path="/hello" docBase="D:\eclipse3.2.2forwebtools\works

C++創建對象的方法【轉】

內存 stream self 一般來說 ron ref 支持 內存碎片 搜索 我們都知道C++中有三種創建對象的方法,如下: #include <iostream> using namespace std; class A { private: in

Eclipse設置編碼格式的方法

右擊 https 出現 water 不一致 沒有 部分 space 菜單 轉自:https://blog.csdn.net/rainy_black_dog/article/details/52403735 很早以前聽過一位老師說過:咱們中國人不管學習哪種編程語言,總會遇到亂

Java Web 項目發布到Tomcat部署方法

true app text 中新 xml文件 serve pac base win 第一種方法:在tomcat中的conf目錄中,在server.xml中的,節點中添加: <Context path="/" docBase="E:\TOMCAT\apache-tomc

Android應用開發常見的圖片壓縮方法

Android應用開發中三種常見的圖片壓縮方法,分別是:質量壓縮法、比例壓縮法(根據路徑獲取圖片並壓縮)和比例壓縮法(根據Bitmap圖片壓縮)。 一、質量壓縮法 private Bitmap compressImage(Bitmap image) { ByteArrayOutput

FileOutputStream寫入換行符的方法

               FileOutputStream中有三種方法寫入一個換行符號 第一種:Windows環境下使用顯示換號符號“\r\n” 第二種:Unix環境下使用顯示換號符號“\n” 第三種:使用Java自定義的換行符號,這種方法具有良好的跨平臺性,推薦使

1、利用介面實現動態的建立物件[選做題] 1.1 建立4個類: 蘋果 香蕉 葡萄 園丁 1.2 在水果的構造方法列印一句話. 以蘋果類為例

package javademo9; import java.util.Scanner; interface Fruit{ } class Apple implements Fruit { public Apple() { System.out.println("建立了一個蘋

java 常見記憶體溢位錯誤的處理方法

相信有一定Java開發經驗的人或多或少都會遇到OutOfMemoryError的問題,這個問題曾困擾了我很長時間,隨著解決各類問題經驗的積累以及對問題根源的探索,終於有了一個比較深入的認識。 在解決java記憶體溢位問題之前,需要對jvm(java虛擬機器)的

iOS定時器使用方法

談到定時器,我查了一下資料,發現大概有三種實現方法,依次是NSTimer、CADisplayLink、GCD。接下來我就一一介紹它們的用法。 一、NSTimer 1. 建立方法 NSTimer *timer = [NSTimer scheduledTimerWi

JS主要方法(函式定義)類別理解 —(JS面向物件&原型)

JS中三種主要方法(函式定義)類別理解 —(JS面向物件&原型) 首先理解在JavaScript中: 函式是“第一等公民” 一切皆物件 javascript的方法可以分為三類: 類方法 物件方法 原型方法 程式碼示例:

C#方法轉換字串變成數值型別

    第一種方法:convert.to…的方法     直接看例題就行:     第二種方法: int.parse(string)方法     再舉例:     第三種方法:int

unity呼叫其他指令碼函式的方法

第一種,被呼叫指令碼函式為static型別,呼叫時直接用  指令碼名.函式名()第二種,GameObject.Find("指令碼所在的物體的名字").SendMessage("函式名"); //能呼叫public和private型別函式第三種,GameObject.Find(

Unity3D呼叫其他指令碼函式的方法

第一種,被呼叫指令碼函式為static型別,呼叫時直接用  指令碼名.函式名()。很不實用…… 第二種,GameObject.Find("指令碼所在物體名").SendMessage("函式名");  此種方法可以呼叫public和private型別函式 第三種,Ga

比較Spring例項化Bean的方法

1 使用構造器例項化 <!-- 呼叫預設構造器實現 可以使用scope="prototype"指定是否使用單例模式 --> <bean id="personService" cl

shell指令碼程式設計for while until迴圈的使用方法

最後要介紹的是 shell script 設計中常見的"迴圈"(loop)。所謂的 loop 就是 script 中的一段在一定條件下反覆執行的程式碼。 bash shell 中常用的 loop 有如下三種: * for * while * until for l

用flask開發個人部落格(40)—— Flask測試方法

一、單元測試並統計測試的覆蓋率 1.1 Flask中的單元測試         在之前的文章中介紹過在flask中進行單元測試的方法,目前我們的程式碼中存在下面的單元測試: classBasicTestCase(unittest.TestCase): def Set

Android 使用執行緒的方法

public class Thread There are basically two main ways of having aThreadexecute application code. One is providing a new class that extendsThreadand over

【JAVA學習】java==、equals()、hashCode()都和物件的比較有關,在java這三者各有什麼用處呢,即java為什麼需要設計這物件的比較方法呢?

關於hashCode() 為什麼會設計hashCode()方法?    hashCode()方法返回的就是一個數值,我們稱之為hashCode吧。從方法的名稱上就可以看出,其目的是生成一個hash碼。hash碼的主要用途就是在對物件進行雜湊的時候作為key輸入,據此很容易推斷出,我們需要每個物件的ha