【Qt】设置互斥型按键组(bool QObject::blockSignals(bool block)) 两种方法

这篇具有很好参考价值的文章主要介绍了【Qt】设置互斥型按键组(bool QObject::blockSignals(bool block)) 两种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种
一、相关的函数
bool QObject::blockSignals(bool block)函数的文档说明
百度翻译:
如果block为true,则此对象发出的信号将被阻止(即,发出信号将不会调用与之连接的任何内容)。如果块为false,则不会发生此类块。
返回值是signalsBlocked()的前一个值。
请注意,即使此对象的信号被阻止,也会发出destroyed()信号。
阻塞时发出的信号不会被缓冲。

二、结果:
每个按键都要确保checkable属性勾选了。
qt按钮互斥,Qt,学习笔记,ui,qt
点击任何一个按键的时候另一个按键会退出选中状态。
qt按钮互斥,Qt,学习笔记,ui,qt
qt按钮互斥,Qt,学习笔记,ui,qt

三、代码
.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_Btn1_clicked();

    void on_Btn2_clicked();

    void on_Btn3_clicked();

private:
    Ui::Widget *ui;

    void BtnBlockSignals(bool block);
};

#endif // WIDGET_H

.cpp文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->Btn1->setChecked(true);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::BtnBlockSignals(bool block)
{
    ui->Btn1->blockSignals(block);
    ui->Btn2->blockSignals(block);
    ui->Btn3->blockSignals(block);
}

void Widget::on_Btn1_clicked()
{
    BtnBlockSignals(true);
    ui->Btn1->setChecked(true);
    ui->Btn2->setChecked(false);
    ui->Btn3->setChecked(false);
    BtnBlockSignals(false);
}

void Widget::on_Btn2_clicked()
{
    BtnBlockSignals(true);
    ui->Btn1->setChecked(false);
    ui->Btn2->setChecked(true);
    ui->Btn3->setChecked(false);
    BtnBlockSignals(false);
}

void Widget::on_Btn3_clicked()
{
    BtnBlockSignals(true);
    ui->Btn1->setChecked(false);
    ui->Btn2->setChecked(false);
    ui->Btn3->setChecked(true);
    BtnBlockSignals(false);
}

第二种
使用按键组来实现
关键函数:setExclusive();
exclusive : bool
This property holds whether the button group is exclusive
If this property is true, then only one button in the group can be checked at any given time. The user can click on any button to check it, and that button will replace the existing one as the checked button in the group.
In an exclusive group, the user cannot uncheck the currently checked button by clicking on it; instead, another button in the group must be clicked to set the new checked button for that group.
By default, this property is true.
Access functions:
bool
exclusive() const
void
setExclusive(bool)
官方文档的百度翻译:
此属性保留按钮组是否是独占的如果此属性为true,则在任何给定时间只能选中组中的一个按钮。用户可以单击任何按钮来选中它,该按钮将替换组中现有的选中按钮。在独占组中,用户不能通过单击当前选中的按钮来取消选中它;相反,必须单击组中的另一个按钮才能为该组设置新的选中按钮。
默认情况下,此属性为true。

QButtonGroup* btnGroup = new QButtonGroup(this);
btnGroup->addButton(ui->Btn4,0);
btnGroup->addButton(ui->Btn5,1);
btnGroup->addButton(ui->Btn6,2);
btnGroup->setExclusive(true);

connect(btnGroup, SIGNAL(buttonClicked(int)), this, SLOT(on_BtnGroup(int)));
//槽函数
void Widget::on_BtnGroup(int index)
{
    qDebug() << "The" << index << "key is clicked";
}

运行结果:
qt按钮互斥,Qt,学习笔记,ui,qt文章来源地址https://www.toymoban.com/news/detail-656330.html

到了这里,关于【Qt】设置互斥型按键组(bool QObject::blockSignals(bool block)) 两种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt QWidget 设置样式表不生效的两种解决方案

    在进行Qt开发的时候,我们往往会遇到这样的场景:         使用Qt Designer 设计界面,但在Qt Designer里设置好样式表,使用快捷键 shift + alt + r 进行预览,样式都是正常的,但程序运行起来,样式就不生效了。 例如设计一个列表,我们将一条数据(一行)设计设计成一个类

    2023年04月10日
    浏览(31)
  • qt中读写锁与互斥锁的区别

    在Qt中,读写锁(QReadWriteLock)和互斥锁(QMutex)都是用于多线程编程时控制共享资源访问的工具,但它们在实现上有一些重要的区别。 QMutex(互斥锁): QMutex是最基本的锁,用于保护临界区,确保在任意时刻只有一个线程可以访问被保护的资源。 当一个线程获取到互斥锁时

    2024年02月20日
    浏览(26)
  • 掷骰子的多线程应用程序2基于互斥量的线程同步(复现《Qt C++6.0》)

    说明:在复现过程中出现两点问题(1)run()函数中对m_diceValued的赋值(2)do_timeOut()函数中没有对m_seq、m_diceValued进行定义。修改后的复现程序如下所示: 主线程: .h .cpp 工作线程: .h .cpp

    2024年02月07日
    浏览(57)
  • 下QT按键与LINUX按键对应过程的源码查看

    简单记录下QT按键与LINUX按键对应过程的源码查看 一,linux侧代码: linux按键定义文件(linux-3.10):include/uapi/linux/input.h 可以通过hexdump命令十六进制查看实时按键的事件 hexdump /dev/input/event2 文件的内容是 input_event结构体 关键结构体input_event信息: struct input_event { struct timev

    2024年02月06日
    浏览(23)
  • Qt键盘事件处理——如何在Qt中监听按键操作

    Qt键盘事件处理——如何在Qt中监听按键操作 在Qt中,使用键盘是很常见的操作。如何通过代码来实现键盘事件的监听和响应呢?本文将详细介绍在Qt中如何监听键盘事件,并实现一些基本的按键操作。 在Qt中,所有的键盘事件都被封装成了一个QKeyEvent对象,我们只需要在需要

    2024年02月11日
    浏览(32)
  • Qt获取键盘按键ctrl和alt以及shift按键按下和松开

    .h文件中定义 这里主要为了获取按键ctrl和alt以及shift按键按下和松开来达到对QTableWidget中的内容进行多选 但是这引入了一个问题,那就是当前界面想要使用按键捕获,就需要在切换到该界面时调用: grabKeyboard() 那么在这个例子中就是调用 my_record-grabKeyboard(); 到达获取键盘的

    2024年02月12日
    浏览(32)
  • Qt键盘事件常用按键key值整理

    Qt文档中给了个上百个按键,太多了,所以这里整理了Qt中键盘事件常用的一些按键,若各位想找的按键在这里找不到的话,可以自行在Qt文档中再查看 键名 十六进制值 按键 Qt::Key_Escape 0x01000000 Esc  Qt::Key_Tab 0x01000001 Tab  Qt::Key_Backtab 0x01000002 Tab  Qt::Key_Backspace 0x01000003 退格 Q

    2024年02月12日
    浏览(29)
  • QT打包的两种方式

    QT打包的两种方式: 一个是QT5自带的windeployqt(不需要下载安装),它可以找到程序(exe)用到的所有库文件,并且都拷贝到exe程序的当前文件。此时打包的exe较小,需要和拷贝进来的文件放一起运行,也可以将这些文件再次打包成一个大的exe文件,此时用的第二种打包方式

    2024年02月16日
    浏览(36)
  • qt创建线程的两种方法

    第一种:继承QThread类 方法描述 1。类MyThread继承QThread, 2。重载MyThread中的run()函数,在run()函数中写入需要执行的工作; 3。调用start()函数来启动线程。 不是真的跨线程,子线程ID和主线程ID是同一个 第二种:QObject::moveToThread 这就是我要的子线程 //用于托管我的子线程

    2024年04月27日
    浏览(24)
  • ubuntu中通过logiops设置罗技鼠标按键

    Logitech Options 是罗技办公鼠标的自定义功能驱动,但是只提供了Windows和Mac版本。在Linux环境下进行鼠标按键的配置可以使用第三方驱动项目:logiops项目地址 参考官网教程https://github.com/PixlOne/logiops#readme 依赖: 项目需要c++ 14 编译器,需要安装 cmake,libevdev,libudev,libconfig。

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包