Qt菜单栏、工具栏和状态栏

news/2024/7/7 10:39:09

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);
}

http://www.niftyadmin.cn/n/2037904.html

相关文章

VS Code 快捷键(中英文对照版)

原文地址 https://segmentfault.com/u/soulman 希望可以帮到您

《Rust权威指南》学习笔记之第8章 通用集合类型

《Rust权威指南》学习笔记之第8章 通用集合类型动态数组创建更新销毁读取动态数组中的元素遍历枚举存储多个类型值字符串存储UTF-8文本字符串是什么创建新字符串更新字符串字符串索引内部布局字符串切片遍历字符串哈希映射中存储键值对创建哈希映射哈希映射与所有权访问哈希映射…

进程占用情况记录

使用一下命令查使用内存最多的3个进程 ps -aux | sort -k4nr | head -K 说明&#xff1a; 如果是10个进程&#xff0c;K10&#xff0c;如果是最高的三个&#xff0c;K3 说明&#xff1a;ps -aux中&#xff08;a指代all——所有的进程&#xff0c;u指代userid——执行该进程的用…

《Rust权威指南》学习笔记之第9章 错误处理

《Rust权威指南》学习笔记之第9章 错误处理不可恢复错误与panic!panic!中产生回溯信息可恢复错误与Result匹配不同错误失败时触发panic的快捷方式&#xff1a;unwrap和expect传播错误传播错误的快捷方式&#xff1a;&#xff1f;运算符?运算符只能被用于返回Result的函数要不要…

P2018 消息传递

暴力贪心即可. 考虑从下往上计算. 对于一个根节点的所有子节点, 明显我们应该优先告诉耗时长的子节点. 于是贪心. 假设已经知道了所有子节点的最少花费时间. 我们将其从小到大排序, 那么最后一个应该最先告诉.这可以通过交换法证明. 当前节点的最小花费也就可以构造出来了. #in…

bzoj 1510 [POI2006]Kra-The Disks——思路

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1510 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N3e55,INF1e95; int n,m,h[N],r,p0; int rdn() {int ret0;boo…

C/C++数学运算

C/C数学运算 - * /和数值组成的字符串表达式解析 - * / % ^ ()和数学函数组成的字符串表达式解析最终版字符串计算 - * /和数值组成的字符串表达式解析 #include <iostream> #include <stack> using namespace std;enum TOKEN_TYPE {OPERATOR, NUMBER };//去除exp…

转Jmeter报告优化之New XSL stylesheet

Jmeter默认的报告展示的信息比较少&#xff0c;如果出错了&#xff0c;不是很方便定位问题。由Jmeter默认报告优化这篇文章可知&#xff0c;其实由.jtl格式转换为.html格式的报告过程中&#xff0c;style文件起了很关键的作用。下面介绍另一种style文件的使用方法&#xff1a; …