若想在状态条显示信息,直接在主窗口QMainWindow需要的位置调用statusBar()->showMessage()操作即可。这个功能很有用,在没有介绍输出组件和QMessageBox以前,可以用该功能输出显示信息。下面的代码将原来用消息对话框弹出显示的信息,改为在状态栏输出信息。
void MainWindow::on_action_O_triggered() { //输入以下用户代码 //QMessageBox::information(this, "消息","选择了打开菜单项"); statusBar()->showMessage(tr("选择了打开菜单项")); }
和工具条一样,在状态条中也可以添加窗口部件。下面的例子在状态条增加两个标签部件,显示鼠标的位置信息。通过这种方法,可以把进度条、标签等合适的部件放在状态条显示。
(1)在头文件中增加以下代码,包含标签部件的头文件,定义数据响应操作。
//增加头文件,引用QLabel #include<QLabel> … Public: … //增加鼠标移动事件响应操作 void mouseMoveEvent(QMouseEvent * event); //增加两个标签 QLabel *MouseX; QLabel *MouseY;
(2)在构造函数中,增加以下代码,设置显示标签的位置。
MouseX=new QLabel(ui->statusBar); MouseX->setFixedWidth(50); MouseX->setIndent(3); MouseY=new QLabel(ui->statusBar); MouseY->setFixedWidth(50); MouseY->setIndent(3); ui->statusBar->addWidget(MouseX); ui->statusBar->addWidget(MouseY); setMouseTracking(true);
(3)实现mouseMoveEvent操作,显示鼠标移动位置。
void MainWindow::mouseMoveEvent(QMouseEvent * event) { MouseX->setNum(event->x()); MouseY->setNum(event->y()); }
(4)编译运行,如图2-24所示。
图2-24 状态条显示程序运行界面
在开发系统服务和软件的时候,我们经常希望软件在后台或以隐藏的方式运行,希望在系统任务条的拖盘区显示软件运行的状态。Qt提供了QSystemTrayIcon类,可以实现在系统拖盘区响应用户的操作。
(1)在头文件中添加以下代码,包含QsystemTrayIcon模块头文件。
… //添加以下头文件 #include<QSystemTrayIcon> … //添加QSystemTrayIcon 和被激活的操作 public: … QSystemTrayIcon * myTrayIcon; public slots: void activated(QSystemTrayIcon::ActivationReason reason); …
(2)在构造函数中添加以下代码,设置系统托盘图标和操作的关联。
… //添加包含文件 #include<QSystemTrayIcon> #include<QIcon> //在构造函数中添加以下代码 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { … QIcon systemIcon(":/qt-logo.png"); myTrayIcon=new QSystemTrayIcon(systemIcon,this); myTrayIcon->show(); myTrayIcon->showMessage("提示", "单击隐藏,双击显示主窗口"); myTrayIcon->setContextMenu(ui->menu_F); connect(myTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason )),this, SLOT(activated(QSystemTrayIcon::ActivationReason ))); } …
(3)实现被激活的操作,这里简单地实现了当用户单击系统托盘图标时显示或隐藏主窗口。
void MainWindow::activated(QSystemTrayIcon::ActivationReason reason) { switch(reason){ case QSystemTrayIcon::Trigger: this->hide(); break; case QSystemTrayIcon::DoubleClick: this->showNormal(); break; default:break; } }
上面代码中:
① myTrayIcon->showMessage("提示", "单击隐藏,双击显示主窗口")语句在系统拖盘增加图标时显示提示信息。
② myTrayIcon->setContextMenu(ui->menu_F)语句在用户右击时,弹出菜单。
③ activated(QSystemTrayIcon::ActivationReason reason)操作实现的是单击隐藏、双击显示的功能。