- Qt編程快速入門
- 鮑忠貴
- 868字
- 2021-03-19 17:41:45
2.3 工具條
2.3.1 設(shè)計工具條
學(xué)習(xí)了菜單后,工具條的設(shè)計就很簡單了。在Qt Designer中,只需將動作編輯面板中的相關(guān)項拖動到工具條上即可,如圖2-19所示。可以在工具條添加按鈕的風(fēng)格,例如在圖標(biāo)下顯示名稱,在屬性面板中選擇ToolButtonTextUnderIcon選項,如圖2-20所示。

圖2-19 工具條設(shè)計界面

圖2-20 工具條屬性設(shè)置
2.3.2 編寫工具條代碼
因為已經(jīng)創(chuàng)建了動作,只需在MainWindow的構(gòu)造函數(shù)中增加需要的按鈕即可。
aboutMenu->addAction(aboutAct); ui->mainToolBar->addSeparator(); ui->mainToolBar->addAction(aboutAct);
編譯運行,工具條的顯示如圖2-21所示。

圖2-21 工具條設(shè)計程序運行界面
2.3.3 在工具條添加部件
工具條中除了放置動作按鈕以外,還可以放置窗口部件,例如下拉列表、標(biāo)簽條、LCD顯示部件等。窗口部件的使用將在第5章中介紹,這里以一個LCD部件顯示時間作為示例,如圖2-22所示。

圖2-22 工具條中添加部件程序運行界面
按下面的步驟,添加代碼。
(1)在頭文件中,添加LCD數(shù)字控件的定義和定時器響應(yīng)事件函數(shù)。
#include<QLCDNumber> … public: QLCDNumber *myToolBarTime; void timerEvent(QTimerEvent * event);
(2)在MainWindow.cpp源文件中,添加包含文件。
#include<QLCDNumber> #include<QTime> …
(3)在構(gòu)造函數(shù)中,添加以下代碼,獲得當(dāng)前時間,設(shè)置QLCDNumber的顯示格式,添加到工具條中,啟動定時器為1秒顯示一次時間。
QTime Current_Time=QTime::currentTime(); myToolBarTime =new QLCDNumber(ui->mainToolBar); myToolBarTime->setDigitCount(15); myToolBarTime->display(Current_Time.toString("HH:mm:ss.zzz")); ui->mainToolBar->addWidget(myToolBarTime); this->startTimer(1000);
(4)添加timerEvent 操作的實現(xiàn),在該操作函數(shù)中獲取當(dāng)前時間并顯示。
void MainWindow::timerEvent(QTimerEvent * event) { QTime Current_Time=QTime::currentTime(); myToolBarTime->display(Current_Time.toString("HH:mm:ss.zzz")); }
這樣就可以在工具條顯示時間了。這里的代碼用到了時間和定時器,后續(xù)章節(jié)會詳細(xì)介紹它們的使用,這里是設(shè)置了1秒刷新顯示一次當(dāng)前時間的實現(xiàn)。
2.3.4 工具條窗口
有的時候,我們需要在桌面建立一個只有工具條的窗口,例如輸入法設(shè)置、快捷按鈕等,如圖2-23所示。在Qt中,因為工具條和主窗口一樣,是從QWidget部件類繼承的,完全可以創(chuàng)建只有一個工具條的窗口。

圖2-23 工具條窗口
只要在主程序main中直接創(chuàng)建工具條窗口即可,在下面的代碼中,用setWindowFlag將窗口設(shè)置成無框架的,通過信號和槽分別將按鈕動作與主窗口的“關(guān)于”操作、工具條的“關(guān)閉”操作關(guān)聯(lián)起來。
#include<QtGui/QApplication> #include<QAction> #include<QToolBar> #include<QTextCodec> #include<QString> #include<QIcon> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; //設(shè)置中文字符 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); //創(chuàng)建打開、保存、退出、關(guān)于等按鈕的動作 QAction *aboutAct; aboutAct=new QAction(QIcon(":/logo.png"),"&A關(guān)于",&a); QAction *OpenAct; OpenAct=new QAction(QIcon(":/open.png"),"&O打開",&a); QAction *SaveAct; SaveAct=new QAction(QIcon(":/save.png"),"&S保存",&a); QAction *ExitAct; ExitAct=new QAction(QIcon(":/exit.png"),"&E退出",&a); //創(chuàng)建工具條,將動作添加到工具條中 QToolBar *mytoolBar; mytoolBar =new QToolBar(); mytoolBar->addAction(OpenAct); mytoolBar->addAction(SaveAct); mytoolBar->addSeparator(); mytoolBar->addAction(ExitAct); mytoolBar->addSeparator(); mytoolBar->addAction(aboutAct); //設(shè)置窗口形式為無框架模式 mytoolBar->setWindowFlags(Qt::FramelessWindowHint); mytoolBar->setMovable(true); //mytoolBar->setFloatable(true); mytoolBar->show(); //建立信號和槽的連接 QObject::connect(aboutAct, SIGNAL(triggered()), &w, SLOT(about())); QObject::connect(ExitAct, SIGNAL(triggered()), mytoolBar, SLOT(close())); return a.exec(); }
- 自己動手實現(xiàn)Lua:虛擬機(jī)、編譯器和標(biāo)準(zhǔn)庫
- 算法基礎(chǔ):打開程序設(shè)計之門
- C語言程序設(shè)計
- Learning Neo4j 3.x(Second Edition)
- SQL基礎(chǔ)教程(視頻教學(xué)版)
- Python漫游數(shù)學(xué)王國:高等數(shù)學(xué)、線性代數(shù)、數(shù)理統(tǒng)計及運籌學(xué)
- iOS應(yīng)用逆向工程(第2版)
- Mastering Apache Spark 2.x(Second Edition)
- The Complete Coding Interview Guide in Java
- Mastering Apache Maven 3
- 基于ARM Cortex-M4F內(nèi)核的MSP432 MCU開發(fā)實踐
- Python項目實戰(zhàn)從入門到精通
- 智能手機(jī)APP UI設(shè)計與應(yīng)用任務(wù)教程
- Maker基地嘉年華:玩轉(zhuǎn)樂動魔盒學(xué)Scratch
- IPython Interactive Computing and Visualization Cookbook