Qt控件 UI设计 QPushbutton、QToolButton、QMenu

news2024/11/29 20:56:05

Qt控件 UI设计 QPushbutton、QToolButton、QMenu

  • 个人设计QToolButton效果
    • 设计效果
    • 运行效果
  • Chapter1 Qt控件 UI设计 QPushbutton、QToolButton、QMenu
    • 1.QPushbutton和QToolButton的关联和区别:
    • 2.QMenu 可以配合QPushbutton做个下拉菜单
    • 3.点击按钮的功能,toolbutton主题是用ui画的,直接转到槽编写想要实现的功能
    • 4.pushbutton是new出来的,实现一个点击弹出messagebox的功能,需要connect信号和槽。
  • Chapter2 Qt之QToolButton
    • 简述
    • 详细描述
    • 常用接口
    • 更多参考
  • Chapter3 QToolButton 使用(很好用)
    • 简介
  • Chapter4 Qt QToolButton和QListWidget的使用


个人设计QToolButton效果

设计效果

在这里插入图片描述

运行效果

在这里插入图片描述

void MainWindow::btnPopMenuInit()
{
    P_menu = new QMenu(this);
    P_maincontrol = new QAction(tr("主控"),this);
    p_wrjzh = new QAction(tr("无人机"),this);
    p_robot = new QAction(tr("机器人"),this);
    P_menu->addAction(P_maincontrol);
    P_menu->addAction(p_wrjzh);
    P_menu->addAction(p_robot);
    ui->btn_SetMenu->setMenu(P_menu);

    connect(P_maincontrol, &QAction::triggered, this, &MainWindow::slot_maincontrol);
    connect(p_wrjzh, &QAction::triggered, this, &MainWindow::slot_wrjzh);
    connect(p_robot, &QAction::triggered, this, &MainWindow::slot_robot);
    connect(this, SIGNAL(sig_maincontrol(QString)), this, SLOT(slot_getSig(QString)));

}

void MainWindow::slot_maincontrol()
{
    QMessageBox::information(this, tr("下拉菜单触发提示"), tr("slot_maincontrol菜单信号已触发"));
    emit sig_maincontrol(tr("信号触发"));
}

void MainWindow::slot_wrjzh()
{
    QMessageBox::information(this, tr("下拉菜单触发提示"), tr("slot_wrjzh菜单信号已触发"));
}

void MainWindow::slot_robot()
{
    QMessageBox::information(this, tr("下拉菜单触发提示"), tr("slot_robot菜单信号已触发"));
}

void MainWindow::slot_getSig(QString str)
{
    qDebug()<<__FUNCTION__<<str;
}
void MainWindow::on_toolButton_3_clicked()
{
    ui->label_ActionTip->setText(tr("on_toolButton1 clicked"));
    ui->toolButton_2->show(); //toolButton_2按钮显示
}

void MainWindow::on_toolButton_5_clicked()
{
    ui->label_ActionTip->setText(tr("on_toolButton2 clicked"));
    ui->toolButton_2->hide(); //toolButton_2按钮隐藏
}

Chapter1 Qt控件 UI设计 QPushbutton、QToolButton、QMenu

原文链接:https://blog.csdn.net/jhonsss/article/details/131290420

toolbutton:多用于工具栏,提供命令或选项,一般不会带文字在按钮上,用来显示图标

类似word种的这样的工具栏。。。
在这里插入图片描述
pushbutton:是普通按钮,可以提供文字,图标都在按钮上。可以设置一定的界面风格等。

toolButton的功能比pushbutton更多一些。

1.QPushbutton和QToolButton的关联和区别:

1.关联:都是按钮,都可以通过信号槽来控制点击事件的触发。

2.区别:toolbutton更特殊一点,可以配置快捷键触发槽,一般只用图片做按钮配置放在toolbar内,就像下图编辑界面的功能选项,用toolbutton就很简单。

在这里插入图片描述

下面是用toolbutton实现的一个按钮,本次选择toolbutton的原因是因为想把文字显示在图标下面很容易实现。

    ui->ToolBtn_one->setGeometry(10,30,100,100);
    ui->ToolBtn_one->setIcon(QIcon(":/logo/images/1.jpg"));
    ui->ToolBtn_one->setIconSize(QSize(46,46));
    ui->ToolBtn_one->setText(QString::fromLocal8Bit("主控载荷"));
    ui->ToolBtn_one->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

效果如下:
在这里插入图片描述

2.QMenu 可以配合QPushbutton做个下拉菜单

new一个pushbutton,new一个QMenu,new几个QAction,将action的对象加入menu的对象,

将这个pushbutton对象设置为菜单形式,代码如下:

    QPushButton *P_SetMenuBtn = new QPushButton(this);
    P_SetMenuBtn->setGeometry(460,30,100,30);
    P_SetMenuBtn->setText("摇杆选择");
    P_menu = new QMenu(this);
    P_maincontrol = new QAction("主控",this);
    p_wrjzh = new QAction("无人机",this);
    p_robot = new QAction("机器人",this);
    P_menu->addAction(P_maincontrol);
    P_menu->addAction(p_wrjzh);
    P_menu->addAction(p_robot);
    P_SetMenuBtn->setMenu(P_menu);

效果如下:
在这里插入图片描述

3.点击按钮的功能,toolbutton主题是用ui画的,直接转到槽编写想要实现的功能

比如我想要实现的是打开一个linux终端:

        ui->ToolBtn_one->setEnabled(false);
        ui->ToolBtn_two->setEnabled(true);
        ui->ToolBtn_three->setEnabled(true);
        QString cmd = "gnome-terminal \n";
        QProcess start_one;
        start_one.setProcessChannelMode(QProcess::MergedChannels);
        start_one.start("bash");
        start_one.write(cmd.toUtf8());
        start_one.waitForBytesWritten();
        start_one.waitForFinished();
        start_one.closeWriteChannel();
        QString output = start_one.readAll();
        qDebug()<<"output"<<output;

4.pushbutton是new出来的,实现一个点击弹出messagebox的功能,需要connect信号和槽。

1.信号和槽:qt的这个功能基本就是对c++回调函数的封装,使用起来比回调函数更方便,但是牺牲一些性能,会更慢一点。connect的参数我是这么理解的:谁,发出什么信号,想让谁,实现什么功能。它也有第五个参数,是信号和槽的连接方式,一般默认缺省。比如信号和槽不在一个线程中,需要事件循环接受信号,那么默认参数就应是Queuedconnection,这里不细说了。

2.此次是实现点击menu下的action后进行一个弹窗功能,代码如下:

connect(P_maincontrol,&QAction::triggered,this,&MainWindow::do_maincontrol);
 
 
void MainWindow::do_maincontrol()
{
    QMessageBox::information(this," ","这是主控遥感");
 
    emit ZHchaged();
}

Chapter2 Qt之QToolButton

简述

QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar里面。

工具按钮和普通的命令按钮不同,通常不显示文本,而显示图标。

详细描述

当使用QToolBar::addAction()添加一个新的(或已存在的)QAction至工具栏时,工具按钮通常被创建 。也可以用同样的方式构建工具按钮和其它部件,并设置它们的布局。

QToolButton支持自动浮起,在自动浮起模式中,只有在鼠标指向它的时候才绘制三维框架。当按钮被用在QToolBar里时,这个特征会被自动启用,可以使用setAutoRaise()来改变。

按钮的外观和尺寸可通过setToolButtonStyle()和setIconSize()来调节。当在QMainWindow的QToolBar里使用时,按钮会自动地调节来适合QMainWindow的设置(见QMainWindow::setToolButtonStyle() 和QMainWindow::setIconSize())。

工具按钮可以提供一个弹出菜单,使用setMenu()来进行设置。通过setPopupMode()来设置菜单的弹出模式,缺省模式是DelayedPopupMode,这个特征有时对于网页浏览器中的“后退”按钮有用,在按下按钮一段时间后,会弹出一个显示所有可以后退浏览的可能页面的菜单列表,默认延迟600毫秒,可以用setPopupDelay()进行调整。

常用接口

  • void setMenu(QMenu * menu)
    设置按钮的弹出菜单。和QPushButton用法类似,详见:Qt之QPushButton

  • void setPopupMode(ToolButtonPopupMode mode)
    设置弹出菜单的方式,默认情况下,设置为DelayedPopup(延迟弹出)。

枚举QToolButton::ToolButtonPopupMode:

在这里插入图片描述

  • void setToolButtonStyle(Qt::ToolButtonStyle style)
    设置按钮风格,只显示一个图标,文本或文本位于图标旁边、下方。默认值是Qt::ToolButtonIconOnly。

枚举Qt::ToolButtonStyle:
在这里插入图片描述

  • void setArrowType(Qt::ArrowType type)
    设置按钮是否显示一个箭头,而不是一个正常的图标。这将显示一个箭头作为QToolButton的图标。
    默认情况下,这个属性被设置为Qt::NoArrow。

枚举Qt::ArrowType:
在这里插入图片描述
效果:
在这里插入图片描述

QToolButton *pButton = new QToolButton(this);
pButton->setArrowType(Qt::LeftArrow);
pButton->setText("Left Arrow");
// 文本位于图标之下
pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
pButton->setStyleSheet("QToolButton{border: none; background: rgb(68, 69, 73); color: rgb(0, 160, 230);}");

这里,我们可以通过样式表color来设置图标的颜色及文本色。

  • void setDefaultAction(QAction * action)
    设置默认的QAction,如果有一个默认的action,该action则会定义QToolButton的文本、图标、TooTip等按钮的属性。
    在这里插入图片描述
QAction *pAction = new QAction(this);
pAction->setText(QString::fromLocal8Bit("一去丶二三里"));
pAction->setIcon(QIcon(":/Images/logo"));
pButton->setIconSize(QSize(48, 48));
pAction->setToolTip(QString::fromLocal8Bit("青春不老,奋斗不止!"));
pButton->setDefaultAction(pAction);
pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

更多参考

Qt之QAbstractButton

Qt之QPushButton

Qt之QCheckBox

Qt之QRadioButton
在这里插入图片描述

Chapter3 QToolButton 使用(很好用)

原文链接:https://blog.csdn.net/kangkanglhb88008/article/details/127119094

简介

QToolButton 是继承了 QPushButton(而QPushButton是继承自QAsractButton),所以它具有 QPushButton的所有属性,成员,和方法。从设计界面可以看出,属性设置的 QToolButton 独有的仅仅如下4项:
在这里插入图片描述
相比于QPushButton 独有的特性介绍

  1. PopupMode
    //默认情况下 菜单是有个延时才会弹出来的.
    setPopupMode(QToolButton::ToolButtonPopupMode) 设置菜单弹出模式

参数为枚举值如下:

QToolButton::DelayedPopup    //默认值 延时弹出

QToolButton::MenuButtonPopup  //该模式下,点击按钮上的小箭头会立即弹出菜单.但点击区域仅限于小箭头区域

QToolButton::InstantPopup //覆盖按钮自身的触发.点击按钮即弹出菜单
  1. ToolButtonStyle
    有几种显示风格
ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
Qt::ToolButtonIconOnly        仅显示图标
Qt::ToolButtonTextOnly        仅显示文本
Qt::ToolButtonTextBesideIcon     文本显示在图标旁边
Qt::ToolButtonTextUnderIcon      文本显示在图标下边
Qt::ToolButtonFollowStyle       遵循QStyle::StyleHint
  1. autoRaise
    这个可以实现扁平化效果,鼠标悬浮会有效果,不错的,可以多用。
ui->toolButton->setAutoRaise(true); 当设置该项时,按钮的边框会被掩藏。
  1. arrowType
    有3态
    按钮箭头的几种显示
setArrowType(Qt::ArrowType type)   默认值为无箭头

Qt::NoArrow 无箭头

Qt::UpArrow 向上的箭头

Qt::DownArrow 向下的箭头

Qt::LeftArrow 向左的箭头

Qt::RightArrow 向右的箭头

箭头和图标显示是二选一的

  1. 多一个trigered(QAction*)信号
    这个就是实现弹出菜单,然后咱们点击了哪一项action,发射的信号。注:这个aciton就是我们在界面上可以创建的那种action,这样确实简单好用了。我觉得这是容易理解,直观的方式了。也有些人是通过代码,为按钮添加action,action又设置一个listview作为widget,每个listview又包含了多个项(每个项就是一个action),我觉得这样反而搞复杂了,不直观,不容易理解。

在这里插入图片描述
按钮的菜单使用

QMenu* menu = new QMenu();
menu->addAction("1");
menu->addAction("2");
menu->addAction("3");
ui->toolButton->setMenu(menu);
connect(ui->toolButton, &QToolButton::triggered, [&](QAction * act)
{
    qDebug() << act>text();
});

设置按钮默认QAction

QAction *action = new QAction(this);
action->setText(u8"action");
action->setToolTip(u8"这是一个action");
action->setDefaultAction(pAction);

其他跟QPushButton一样了。所以,多用这个QToolButton挺好的。

Chapter4 Qt QToolButton和QListWidget的使用

原文链接
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP/HTTPS、SSL/TLS、WS/WSS 都是什么?

有同学问我&#xff0c;HTTP/HTTPS、SSL/TLS、WS/WSS 这都是些什么&#xff1f;那我们就先从概念说起&#xff1a; HTTP 是超文本传输协议&#xff0c;信息是通过明文传输。HTTPS 是在 HTTP 的基础上信息通过加密后再传输。SSL 是实现 HTTPS 信息传输加密的算法。TLS 是 SSL 的…

PMI-ACP(103:17-)

巩固复习&#xff1a;SCRUM Scrum是目前敏捷项目管理的经典框架&#xff0c;在2020年最新版的《Scrum指南》中&#xff0c;Scrum之父对迭代目标和完成的定义进行了更为清晰的阐释。 在Scrum里比较重要的是Sprint冲刺。一个Sprint长度一般是2&#xff5e;4周&#xff0c;固定&…

数据结构:邻接矩阵与邻接表

模型图 邻接矩阵 用于反应图中任意两点之间的关联&#xff0c;用二维数组表示比较方便 以行坐标为起点&#xff0c;列坐标为终点如果两个点之间有边&#xff0c;那么标记为绿色&#xff0c;如图&#xff1a; 适合表示稠密矩阵 邻接表 用一维数组 链表的形式表示&#xff…

day02-Ant Design以及Ant Design Pro入门

课程简介 ReactJS入门&#xff0c;Model层 Ant Design 入门 Ant Design Pro 入门 1、ReactJS入门 1.1、Model 1.1.1、分层 上图中&#xff0c;左侧是服务端代码的层次结构&#xff0c;由 Controller 、 Service 、 Data Access 三层组成服务端系统&#xff1a; Contro…

一分钟生成PPT,利用人工智能快速提高办公效率(无需第三方插件)

人工智能技术的发展正以惊人的速度改变着我们的世界&#xff0c;今天给大家介绍下利用ChatGPT快速生成PPT的方法&#xff0c;它能够帮助你一键生成PPT内容和漂亮的PPT文档&#xff0c;无需繁琐的设计和排版&#xff0c;只需要与ChatGPT交流&#xff0c;你就能轻松拥有一份令人赞…

社区论坛在线交流网站系统源码+SEO优化 带前后端完整搭建教程

大家好&#xff0c;今天罗峰来给大家分享一款社区论坛在线交流网站系统源码。社区论坛在线交流在当下时时代还是很火的。现在人们对于在线交流和互动的需求不断增加。社区论坛作为一种传统的在线交流方式&#xff0c;仍然有着广泛的市场需求和用户群体。然而&#xff0c;现有的…

redis1之安装redis,启动,常用数据结构

目录 redis安装与启动、常见数据结构 启动 Redis客户端 数据结构与常见的命令 redis的通用命令 String类型的用法 Hash命令的用法 List命令 Set命令 SortedSet类型用法 redis安装与启动、常见数据结构 1&#xff0c;在linux上安装上gcc的依赖&#xff0c;我这里是centos7.6…

为什么边缘计算是能源行业缺失的一环

关键要点 展望未来&#xff0c;边缘计算将使能源部门能够更好地应对不断增长的能源需求的挑战&#xff0c;提高资源利用率&#xff0c;并实现更可持续的能源生态系统。 能源行业正在经历重大变革&#xff0c;因为它面临着许多挑战&#xff0c;例如整合可再生能源、电力需求激增…

thinkPHP5怎么打开页面调试,查看网页运行时间

开启trace 在config.php中找到 ‘app_trace’ > false, 修改为&#xff1a; ‘app_trace’ > true,

中国统计年鉴,覆盖2016-2022年数据,超全数据一览!

今天分享一个超详细中国统计年鉴&#xff0c;覆盖2016-2022年数据&#xff0c;包含多方面数据及指标&#xff0c;需要可自取 网站搜索“citybox城市沙盒”或同名wechat订阅号可自行获取 数据信息&#xff1a; 数据名称: 中国统计年鉴 数据格式: Html、Excel 数据时间: 20…

chromedp库编写程序

步骤1&#xff1a;首先&#xff0c;我们需要导入chromedp库&#xff0c;以便使用它来下载网页内容。 import chromedp 步骤2&#xff1a;然后&#xff0c;我们需要创建一个函数&#xff0c;该函数接受一个URL作为参数&#xff0c;并使用chromedp库下载该URL的内容。 func do…

有什么好用的日常事务管理软件?的修APP对日常管理有什么帮助?

在快节奏的现代生活中&#xff0c;我们每天都要面对各种各样的工作任务和琐事。有时候&#xff0c;我们可能会因为忘记重要事项或者没有规划好时间而导致工作效率低下。为了解决这个问题&#xff0c;我为大家推荐一款日常管理神器——的修APP。   的修APP是一款简单易用的日常…

InfiniBand 的前世今生

今年&#xff0c;以 ChatGPT 为代表的 AI 大模型强势崛起&#xff0c;而 ChatGPT 所使用的网络&#xff0c;正是 InfiniBand&#xff0c;这也让 InfiniBand 大火了起来。那么&#xff0c;到底什么是 InfiniBand 呢&#xff1f;下面&#xff0c;我们就来带你深入了解 InfiniBand…

Java——并发编程(CAS、Lock和AQS)

1、Java Concurrent API 中的 Lock 接口(Lock interface)是什么&#xff1f;对比同步它有什么优势&#xff1f; 答&#xff1a;Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构&#xff0c;可以具有完全不同的性质&#xff0c;并且可以支持多个相…

Scala中类的继承、抽象类和特质

1. 类的继承 1.1 Scala中的继承结构 Scala 中继承关系如下图&#xff1a; Any 是整个继承关系的根节点&#xff1b; AnyRef 包含 Scala Classes 和 Java Classes&#xff0c;等价于 Java 中的 java.lang.Object&#xff1b; AnyVal 是所有值类型的一个标记&#xff1b; Nul…

AI:51-基于深度学习的电影评价

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

渗透测试工具(AntSword)

软件安装 蚁剑渗透测试工具分为AntSword-Loader和antSword两部分 文件下载&#xff1a; AntSword-Loader下载地址&#xff1a;GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 antSword下载地址&#xff1a;Releases AntSwordProject/antSword GitHub 使用&a…

公司内网知识问答库系统源码 完全开源可二次开发 带完整搭建教程

随着公司规模的扩大和业务复杂性的增加&#xff0c;员工需要更快更有效地获取和共享知识。一个内部的知识问答库系统可以帮助公司提高员工的工作效率和知识管理水平。 有效的内部沟通是公司成功的关键因素之一。通过创建一个内部的知识问答平台&#xff0c;可以鼓励员工之间的…