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