W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面一節(jié)我們已經(jīng)把 QAction 添加到菜單和工具條上面。現(xiàn)在我們要添加一些圖片美化一下,然后把信號(hào)槽加上,這樣,我們的 action 就可以相應(yīng)啦!
首先來(lái)添加圖標(biāo)。QAction 的圖標(biāo)會(huì)顯示在菜單項(xiàng)的前面以及工具條按鈕上面顯示。
為了添加圖標(biāo),我們首先要使用 Qt 的資源文件。在 QtCreator 的項(xiàng)目上右擊,選擇 New File...,然后選擇 resource file。
然后點(diǎn)擊 next,選擇好位置,F(xiàn)inish 即可。為了使用方便,我就把這個(gè)文件建在根目錄下,建議應(yīng)該在仔細(xì)規(guī)劃好文件之后,建在專門的 rsources 文件夾下。完成之后,生成的是一個(gè).qrc 文件,qrc 其實(shí)是 Qt Recource Collection 的縮寫。它只是一個(gè)普通的 XML 文件,可以用記事本等打開。不過,這里我們不去深究它的結(jié)構(gòu),完全利用 QtCreator 操作這個(gè)文件,
點(diǎn)擊 Add 按鈕,首先選擇 Add prefix,然后把生成的/new/prefix 改成/。這是 prefix 就是以后使用圖標(biāo)時(shí)需要提供的前綴,以/開頭。添加過 prefix 之后,然后在工程文件中添加一個(gè)圖標(biāo),再選擇Add file,選擇那個(gè)圖標(biāo)。這樣完成之后保存 qrc 文件即可。
說(shuō)明一下,QToolBar 的圖標(biāo)大小默認(rèn)是3232,菜單默認(rèn)是1616。如果提供的圖標(biāo)小于要求的尺寸,則不做操作,Qt 不會(huì)為你放大圖片;反之,如果提供的圖標(biāo)文件大于相應(yīng)的尺寸要求,比如是64*64,Qt 會(huì)自動(dòng)縮小尺寸。
圖片的路徑怎么看呢?可以看出,Qt 的資源文件視圖使用樹狀結(jié)構(gòu),根是/,葉子節(jié)點(diǎn)就是圖片位置,連接在一起就是路徑。比如這張圖片的路徑就是/Open.png。
注意,為了簡(jiǎn)單起見,我們沒有把圖標(biāo)放在專門的文件夾中。正式的項(xiàng)目中應(yīng)該單獨(dú)有一個(gè) 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ù)需要一個(gè)參數(shù),是一個(gè)字符串。由于我們要使用 qrc 中定義的圖片,所以字符串以 : 開始,后面跟著 prefix,因?yàn)槲覀兿惹岸x的 prefix是/,所以就需要一個(gè)/,然后后面是 file 的路徑。這是在前面的 qrc 中定義的,打開 qrc 看看那張圖片的路徑即可。
好了,圖片添加完成,然后點(diǎn)擊運(yùn)行,看看效果吧!
瞧!我們只需要修改 QAction,菜單和工具條就已經(jīng)為我們做好了相應(yīng)的處理,還是很方便的!
下一步,為 QAction 添加事件響應(yīng)。還記得 Qt 的事件響應(yīng)機(jī)制是基于信號(hào)槽嗎?點(diǎn)擊 QAction 會(huì)發(fā)出 triggered()信號(hào),所以,我們要做的是聲名一個(gè) slot,然后 connect 這個(gè)信號(hào)。
mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void open();
private:
QAction *openAction;
};
因?yàn)槲覀兊?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"));
}
注意,我們?cè)?open()函數(shù)中簡(jiǎn)單的彈出一個(gè)標(biāo)準(zhǔn)對(duì)話框,并沒有其他的操作。編譯后運(yùn)行,看看效果:
好了,關(guān)于 QAction 的動(dòng)作也已經(jīng)添加完畢了!
至此,QAction 有關(guān)的問題先告一段落。最后說(shuō)一下,如果你還不知道怎么添加子菜單的話,看一下QMenu 的 API,里面會(huì)有一個(gè) addMenu 函數(shù)。也就是說(shuō),創(chuàng)建一個(gè) QMenu 然后添加就可以的啦!
本文出自 “豆子空間” 博客,請(qǐng)務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: