Qt菜单栏、工具栏和状态栏
- 菜单栏
- 菜单栏类QMenuBar
- 动作类QAction
- 菜单类QMenu
- 右键菜单
- 工具栏
- 状态栏
菜单栏
两种菜单:
- 程序界面顶端,鼠标左键单击。
- 界面右击,弹出上下文菜单,右键菜单。
菜单栏类QMenuBar,添加QMenu和QAction。
菜单类QMenu,添加QMenu和QAction。
动作类QAction,用户与界面进行交互。
addMenu()
addAction()
创立菜单操作:
(1)创建菜单栏对象:
QMenuBar menuBar = QMenuBar();
(2)创建菜单对象:
QMenu menu = menuBar .addMenu(“menu”);
(3)菜单添加动作(操作):
QAction action = menu.addAction(“action”);
(4)动作关联槽函数SLOT():
connect(menuBar, SIGNAL(triggered(QAction*)), this, SLOT(trigerMenu(QAction*)));
(5)定义动作处理槽函数trigerMenu(QAction*)。
菜单栏类QMenuBar
QMenuBar(QWidget *parent = nullptr)
QMenuBar menuBar = new QMenuBar(this);
QAction *addMenu(QMenu *menu)
menuBar->addMenu(pmenu);
成员函数 | 说明 |
---|---|
menuBar() | 返回主窗口QMenuBar对象 |
addMenu() | 菜单栏添加QMenu对象 |
addAction() | QMenu添加动作按钮 |
setEnabled() | 动作按钮状态设置启用/禁用 |
addSeperator() | 添加分割线 |
clear() | 删除菜单/菜单栏内容 |
setShortcut() | 快捷键 |
setText() | 文本 |
setTitle() | QMenu标题 |
text() | 返回QAction关联文本 |
title() | 返回QMenu菜单标题 |
动作类QAction
提供可同时出现在菜单和工具条上的抽象用户界面的操作。
可以设置或获取图标、菜单文本、状态栏文本、工具栏提示。
setIconSet(), setText(), setStatusTip(), setToolTip().
icon(), text(), StatusTip(), ToolTip().
菜单类QMenu
菜单栏菜单,QMenuBar::addMenu()添加。
上下文菜单,popup()函数异步执行,exec()函数同步执行。
单击子菜单项,触发动作信号triggered。
QMenu(const QString &title, QWidget *parent = nullptr)
QMenuBar *menuBar = new QMenuBar(this);
QMenu *pmenu = new QMenu(QString::fromLocal8Bit(“文件”));
menuBar->addMenu(pmenu);
#define z QString::fromLocal8Bit
QMenu *pmenu1 = new QMenu(z("文件"));
QAction *pa1 = pmenu1->addAction(z("新建")); //添加子菜单项
QAction *pa2 = pmenu1->addAction(z("退出"));
QMenu *pmenu2 = new QMenu(z("编辑"));
pmenu2->addAction(z("复制"));
pmenu2->addAction(z("粘贴"));
this->menuBar()->addMenu(pmenu1);
this->menuBar()->addMenu(pmenu2);
connect(this->menuBar(), SIGNAL(triggered(QAction*)), this, SLOT(trigerMenu(QAction*)));
connect(pa1, SIGNAL(triggered()), this, SLOT(onMenu1Event()));
connect(pa2, SIGNAL(triggered()), this, SLOT(onMenu2Event()));
//public slots:
//void trigerMenu(QAction *act);
//void onMenu1Event();
//void onMenu2Event();
void MainWindow::trigerMenu(QAction *act) {
if(act->text() == z("新建")) {
QMessageBox::information(this, z("注意"), z("创建成功")); //#include <QMessageBox>
} else if(act->text() == z("退出")) {
this->close();
}
}
void MainWindow::onMenu1Event() {
QMessageBox::information(this, z("注意"), z("新建成功"));
}
void MainWindow::onMenu2Event() {
close();
}
右键菜单
快捷菜单,上下文菜单。
(1)设置ContextMenuPlicy属性为customContextMenu。
(2)重写contextMenuEvent(QContextMenuEvent *event)事件。
(3)该事件中,创建QMenu,添加QAction,调用exec。
void ImageTree::createActions() {
//创建菜单、菜单项
pop_menu = new QMenu();
add_images_action = new QAction(this);
//连接信号与槽
connect(add_images_action, &QAction::triggered, this, &ImageTree::selectImages);
pop_menu->addAction(add_images_action);
}
void ImageTree::contextMenuEvent(QContextMenuEvent *event) {
//清除原有菜单
//pop_menu->clear();
//pop_menu->addAction(add_images_action);
//菜单出现的位置为当前鼠标的位置
pop_menu->exec(QCursor::pos());
event->accept();
}
void ImageTree::translateLanguage() {
add_images_action->setText(tr("add images"));
}
工具栏
QToolBar
#define z QString::fromLocal8Bit
QMenu *pFile = menuBar()->addMenu(z("文件"));
QAction *pNew = pFile->addAction(z("新建"));
ui->mainToolBar->addAction(pNew);
connect(pNew, SIGNAL(triggered()), this, SLOT(onNew()));
void MainWindow::onNew() {
QMessageBox::information(this, z("注意"), z("新建成功"));
};
状态栏
QStatusBar
(1)一般信息显示,会被showMessage()函数显示的临时消息覆盖。
void QStatusBar::addWidget(QWidget *widget, int stretch = 0)
QStatusBar *bar = statusBar();
QLabel * first_statusLabel = new QLabel;
first_statusLabel->setMinimumSize(150, 20);
first_statusLabel->setFrameShadow(QFrame::Sunken);
bar->addWidget(first_statusLabel);
(2)永久信息显示,从右往左。
void QStatusBar::addPermanentWidget(QWidget *widget, int stretch = 0)
(3)临时信息显示,覆盖一般信息,指定显示时间,到了就消失。
void QStatusBar::showMessage(const QString &message, int timeout = 0)
毫秒,timeout=0不消失,直到调用clearMeage()。
//正确显示中文
#define execution_character_set("utf-8")
m_status1 = new QLabel;
m_status2 = new QLabel;
m_status3 = new QLabel;
m_status4 = new QLabel;
ui->statusBar->addPermanentWidget(m_status1);
ui->statusBar->addPermanentWidget(m_status2);
ui->statusBar->addWidget(m_status3);
ui->statusBar->addWidget(m_status4);
m_status1->setText("永久信息1");
m_status2->setText("永久信息2");
m_status3->setText("一般信息1");
m_status4->setText("一般信息2");
void MainWindow::on_pushButton_clicked() {
ui->statusBar->showMessage("临时信息", 3000);
}