学习了菜单后,工具条的设计就很简单了。在Qt Designer中,只需将动作编辑面板中的相关项拖动到工具条上即可,如图2-19所示。可以在工具条添加按钮的风格,例如在图标下显示名称,在属性面板中选择ToolButtonTextUnderIcon选项,如图2-20所示。
图2-19 工具条设计界面
图2-20 工具条属性设置
因为已经创建了动作,只需在MainWindow的构造函数中增加需要的按钮即可。
aboutMenu->addAction(aboutAct); ui->mainToolBar->addSeparator(); ui->mainToolBar->addAction(aboutAct);
编译运行,工具条的显示如图2-21所示。
图2-21 工具条设计程序运行界面
工具条中除了放置动作按钮以外,还可以放置窗口部件,例如下拉列表、标签条、LCD显示部件等。窗口部件的使用将在第5章中介绍,这里以一个LCD部件显示时间作为示例,如图2-22所示。
图2-22 工具条中添加部件程序运行界面
按下面的步骤,添加代码。
(1)在头文件中,添加LCD数字控件的定义和定时器响应事件函数。
#include<QLCDNumber> … public: QLCDNumber *myToolBarTime; void timerEvent(QTimerEvent * event);
(2)在MainWindow.cpp源文件中,添加包含文件。
#include<QLCDNumber> #include<QTime> …
(3)在构造函数中,添加以下代码,获得当前时间,设置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 操作的实现,在该操作函数中获取当前时间并显示。
void MainWindow::timerEvent(QTimerEvent * event) { QTime Current_Time=QTime::currentTime(); myToolBarTime->display(Current_Time.toString("HH:mm:ss.zzz")); }
这样就可以在工具条显示时间了。这里的代码用到了时间和定时器,后续章节会详细介绍它们的使用,这里是设置了1秒刷新显示一次当前时间的实现。
有的时候,我们需要在桌面建立一个只有工具条的窗口,例如输入法设置、快捷按钮等,如图2-23所示。在Qt中,因为工具条和主窗口一样,是从QWidget部件类继承的,完全可以创建只有一个工具条的窗口。
图2-23 工具条窗口
只要在主程序main中直接创建工具条窗口即可,在下面的代码中,用setWindowFlag将窗口设置成无框架的,通过信号和槽分别将按钮动作与主窗口的“关于”操作、工具条的“关闭”操作关联起来。
#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; //设置中文字符 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); //创建打开、保存、退出、关于等按钮的动作 QAction *aboutAct; aboutAct=new QAction(QIcon(":/logo.png"),"&A关于",&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); //创建工具条,将动作添加到工具条中 QToolBar *mytoolBar; mytoolBar =new QToolBar(); mytoolBar->addAction(OpenAct); mytoolBar->addAction(SaveAct); mytoolBar->addSeparator(); mytoolBar->addAction(ExitAct); mytoolBar->addSeparator(); mytoolBar->addAction(aboutAct); //设置窗口形式为无框架模式 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(); }