官术网_书友最值得收藏!

  • 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();
}
主站蜘蛛池模板: 延长县| 凤山县| 荔波县| 永川市| 桂东县| 韶山市| 阿拉善左旗| 花莲县| 五峰| 厦门市| 濉溪县| 比如县| 普陀区| 固原市| 保山市| 年辖:市辖区| 夹江县| 海城市| 太白县| 安乡县| 诸城市| 若尔盖县| 潞城市| 庆阳市| 政和县| 八宿县| 思南县| 宁波市| 文水县| 府谷县| 象山县| 利津县| 林芝县| 呼伦贝尔市| 上林县| 涞水县| 封丘县| 中江县| 阳高县| 贵定县| 禄丰县|