在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ C/ 菜單和工具條(續(xù))
Qt 容器和算法拾遺
自定義 model 之一
反走樣
Hello, world!
Qt 容器類之關(guān)聯(lián)存儲容器
QStringListModel
拖放技術(shù)之一
狀態(tài)欄
QTreeWidget
拖放技術(shù)之二
通用算法
event()
Qt 學(xué)習(xí)之路(18): Qt 標(biāo)準(zhǔn)對話框之 QInputDialog
Qt 容器類之遍歷器和隱式數(shù)據(jù)共享
QListWidget
Meta-Object 系統(tǒng)
事件接收與忽略
Qt 學(xué)習(xí)之路(tip): parent 參數(shù)
Qt 標(biāo)準(zhǔn)對話框之 QColorDialog
QPainter(續(xù))
國際化(下)
漸變填充
自定義委托
創(chuàng)建 shared library
model-view 架構(gòu)
Graphics View Framework
自定義拖放數(shù)據(jù)對象
QSortFilterProxyModel
國際化(上)
組件布局
自定義 Model 之三
事件過濾器
QDirModel
Hello, world!(續(xù))
Qt 標(biāo)準(zhǔn)對話框之 QFileDialog
自定義 model 之二
深入了解信號槽
坐標(biāo)變換
剪貼板操作
QTableWidget
QByteArray 和 QVariant
創(chuàng)建一個對話框(下)
Qt 學(xué)習(xí)之路(32): 一個簡易畫板的實現(xiàn)(Graphics View)
文本文件讀寫
自定義事件
編寫跨平臺的程序
MainWindow
初探信號槽
Qt 學(xué)習(xí)之路(17): Qt 標(biāo)準(zhǔn)對話框之 QMessageBox
繪圖設(shè)備
菜單和工具條(續(xù))
二進(jìn)制文件讀寫
QString
事件(event)
菜單和工具條
QPainter
Qt 容器類之順序存儲容器
進(jìn)程間交互
API 文檔的使用
創(chuàng)建一個對話框(上)
一個簡易畫板的實現(xiàn)(QWidget)

菜單和工具條(續(xù))

前面一節(jié)我們已經(jīng)把 QAction 添加到菜單和工具條上面。現(xiàn)在我們要添加一些圖片美化一下,然后把信號槽加上,這樣,我們的 action 就可以相應(yīng)啦!

首先來添加圖標(biāo)。QAction 的圖標(biāo)會顯示在菜單項的前面以及工具條按鈕上面顯示。

為了添加圖標(biāo),我們首先要使用 Qt 的資源文件。在 QtCreator 的項目上右擊,選擇 New File...,然后選擇 resource file。

http://wiki.jikexueyuan.com/project/learn-road-qt/images/19.png" alt="" />

然后點擊 next,選擇好位置,F(xiàn)inish 即可。為了使用方便,我就把這個文件建在根目錄下,建議應(yīng)該在仔細(xì)規(guī)劃好文件之后,建在專門的 rsources 文件夾下。完成之后,生成的是一個.qrc 文件,qrc 其實是 Qt Recource Collection 的縮寫。它只是一個普通的 XML 文件,可以用記事本等打開。不過,這里我們不去深究它的結(jié)構(gòu),完全利用 QtCreator 操作這個文件,

http://wiki.jikexueyuan.com/project/learn-road-qt/images/20.png" alt="" />

點擊 Add 按鈕,首先選擇 Add prefix,然后把生成的/new/prefix 改成/。這是 prefix 就是以后使用圖標(biāo)時需要提供的前綴,以/開頭。添加過 prefix 之后,然后在工程文件中添加一個圖標(biāo),再選擇Add file,選擇那個圖標(biāo)。這樣完成之后保存 qrc 文件即可。

說明一下,QToolBar 的圖標(biāo)大小默認(rèn)是3232,菜單默認(rèn)是1616。如果提供的圖標(biāo)小于要求的尺寸,則不做操作,Qt 不會為你放大圖片;反之,如果提供的圖標(biāo)文件大于相應(yīng)的尺寸要求,比如是64*64,Qt 會自動縮小尺寸。

http://wiki.jikexueyuan.com/project/learn-road-qt/images/21.png" alt="" />

圖片的路徑怎么看呢?可以看出,Qt 的資源文件視圖使用樹狀結(jié)構(gòu),根是/,葉子節(jié)點就是圖片位置,連接在一起就是路徑。比如這張圖片的路徑就是/Open.png。

注意,為了簡單起見,我們沒有把圖標(biāo)放在專門的文件夾中。正式的項目中應(yīng)該單獨有一個 resources文件夾放資源文件的。

然后回到前面的 mainwindow.cpp,在構(gòu)造函數(shù)中修改代碼:

openAction = new QAction(tr("&Open"), this); 
openAction->setShortcut(QKeySequence::Open); 
openAction->setStatusTip(tr("Open a file.")); 
openAction->setIcon(QIcon(":/Open.png")); // Add code.

我們使用 setIcon 添加圖標(biāo)。添加的類是 QIcon,構(gòu)造函數(shù)需要一個參數(shù),是一個字符串。由于我們要使用 qrc 中定義的圖片,所以字符串以 : 開始,后面跟著 prefix,因為我們先前定義的 prefix是/,所以就需要一個/,然后后面是 file 的路徑。這是在前面的 qrc 中定義的,打開 qrc 看看那張圖片的路徑即可。

好了,圖片添加完成,然后點擊運行,看看效果吧!

http://wiki.jikexueyuan.com/project/learn-road-qt/images/22.png" alt="" />

瞧!我們只需要修改 QAction,菜單和工具條就已經(jīng)為我們做好了相應(yīng)的處理,還是很方便的!

下一步,為 QAction 添加事件響應(yīng)。還記得 Qt 的事件響應(yīng)機(jī)制是基于信號槽嗎?點擊 QAction 會發(fā)出 triggered()信號,所以,我們要做的是聲名一個 slot,然后 connect 這個信號。

mainwindow.h

class MainWindow : public QMainWindow 
{ 
        Q_OBJECT 

public: 
        MainWindow(QWidget *parent = 0); 
        ~MainWindow(); 

private slots: 
        void open();         

private: 
        QAction *openAction; 
};

因為我們的 open()目前只要在類的內(nèi)部使用,因此定義成 private slots 即可。然后修改 cpp 文件:

MainWindow::MainWindow(QWidget *parent) 
        : QMainWindow(parent) 
{ 
        openAction = new QAction(tr("&Open"), this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr("Open a file.")); 
        openAction->setIcon(QIcon(":/Open.png")); 
        connect(openAction, SIGNAL(triggered()), this, SLOT(open())); 

        QMenu *file = menuBar()->addMenu(tr("&File")); 
        file->addAction(openAction); 

        QToolBar *toolBar = addToolBar(tr("&File")); 
        toolBar->addAction(openAction); 
} 

void MainWindow::open() 
{ 
        QMessageBox::information(NULL, tr("Open"), tr("Open a file")); 
}

注意,我們在 open()函數(shù)中簡單的彈出一個標(biāo)準(zhǔn)對話框,并沒有其他的操作。編譯后運行,看看效果:

http://wiki.jikexueyuan.com/project/learn-road-qt/images/23.png" alt="" />

好了,關(guān)于 QAction 的動作也已經(jīng)添加完畢了!

至此,QAction 有關(guān)的問題先告一段落。最后說一下,如果你還不知道怎么添加子菜單的話,看一下QMenu 的 API,里面會有一個 addMenu 函數(shù)。也就是說,創(chuàng)建一個 QMenu 然后添加就可以的啦!

本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031