购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 工具条

2.3.1 设计工具条

学习了菜单后,工具条的设计就很简单了。在Qt Designer中,只需将动作编辑面板中的相关项拖动到工具条上即可,如图2-19所示。可以在工具条添加按钮的风格,例如在图标下显示名称,在属性面板中选择ToolButtonTextUnderIcon选项,如图2-20所示。

图2-19 工具条设计界面

图2-20 工具条属性设置

2.3.2 编写工具条代码

因为已经创建了动作,只需在MainWindow的构造函数中增加需要的按钮即可。

aboutMenu->addAction(aboutAct);
ui->mainToolBar->addSeparator();
ui->mainToolBar->addAction(aboutAct);

编译运行,工具条的显示如图2-21所示。

图2-21 工具条设计程序运行界面

2.3.3 在工具条添加部件

工具条中除了放置动作按钮以外,还可以放置窗口部件,例如下拉列表、标签条、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.3.4 工具条窗口

有的时候,我们需要在桌面建立一个只有工具条的窗口,例如输入法设置、快捷按钮等,如图2-23所示。在Qt中,因为工具条和主窗口一样,是从QWidget部件类继承的,完全可以创建只有一个工具条的窗口。

图2-23 工具条窗口

只要在主程序main中直接创建工具条窗口即可,在下面的代码中,用setWindowFlag将窗口设置成无框架的,通过信号和槽分别将按钮动作与主窗口的“关于”操作、工具条的“关闭”操作关联起来。 0hXc+iGbborC6VPIJUGm6Gqc5R163B2K1XzaKkopOJZ7kdZsQ1bPZ0uYVukBqlVW

#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();
}
点击中间区域
呼出菜单
上一章
目录
下一章
×