Qt之QRadioButton

简述

QRadioButton部件提供了一个带有文本标签的单选框(单选按钮)。

QRadioButton是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。单选框通常呈现给用户一个“多选一”的选择。也就是说,在一组单选框中,一次只能选中一个单选框。

  • 简述
  • 详细描述
  • 示例
    • 效果
    • 源码
    • 样式
  • 更多参考

详细描述

单选框默认开启自动互斥(autoExclusive)。如果启用了自动互斥,属于同一个父部件的单选框的行为就和属于一个互斥按钮组的一样。如果你需要为属于同一父部件的单选框设置多个互斥按钮组,把它们加入QButtonGroup中。

每当一个按钮切换选中或未选中状态时,会发出的toggled()信号。如果希望每个按钮切换状态时触发一个动作,连接到这个信号。使用isChecked()来查看特定按钮是否被选中。

就像QPushButton一样,单选框可以显示文本,以及可选的小图标。图标使用setIcon()来设置,文本可以在构造函数或通过setText()来设置。可以指定快捷键,通过在文本中的特定字符前指定一个&。

例如:

QRadioButton *button = new QRadioButton("Search from the &cursor", this);

这个示例中,快捷键为Alt+c。关于更多快捷键的内容请参考:QShortcut 。如果要显示一个“&”,请使用’&&’。

示例

我们来实现一个iphone中常见的开关效果 - 单选。

效果

源码

构建单选框QRadioButton,然后将它们添加至按钮组QButtonGroup中。

QHBoxLayout *pLayout = new QHBoxLayout();
m_pButtonGroup = new QButtonGroup(this);

// 设置互斥
m_pButtonGroup->setExclusive(true);
for (int i = 0; i < 3; ++i)
{
    QRadioButton *pButton = new QRadioButton(this);

    // 设置文本
    pButton->setText(QString::fromLocal8Bit("切换%1").arg(i + 1));

    pLayout->addWidget(pButton);
    m_pButtonGroup->addButton(pButton);
}
pLayout->setSpacing(10);
pLayout->setContentsMargins(10, 10, 10, 10);

setLayout(pLayout);

// 连接信号槽
connect(m_pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));

槽函数,用来判断当前点击的按钮,以及获取按钮组中各个按钮的选中状态。

void MainWindow::onButtonClicked(QAbstractButton *button)
{
    // 当前点击的按钮
    qDebug() << QString("Clicked Button : %1").arg(button->text());

    // 遍历按钮,获取选中状态
    QList<QAbstractButton*> list = m_pButtonGroup->buttons();
    foreach (QAbstractButton *pButton, list)
    {
        QString strStatus = pButton->isChecked() ? "Checked" : "Unchecked";
        qDebug() << QString("Button : %1 is %2").arg(button->text()).arg(strStatus);
    }
}

样式

单选框样式

QRadioButton{
    spacing: 2px;
    color: white;
}
QRadioButton::indicator {
    width: 45px;
    height: 30px;
}
QRadioButton::indicator:unchecked {
    image: url(:/Images/switchOff);
}
QRadioButton::indicator:unchecked:hover {
    image: url(:/Images/switchOffHover);
}
QRadioButton::indicator:unchecked:pressed {
    image: url(:/Images/switchOffPressed);
}
QRadioButton::indicator:checked {
    image: url(:/Images/switchOn);
}
QRadioButton::indicator:checked:hover {
    image: url(:/Images/switchOnHover);
}
QRadioButton::indicator:checked:pressed {
    image: url(:/Images/switchOnPressed);
}

上面,我们通过调用QButtonGroup的setExclusive(true)来设置按钮组中的单选框互斥。

当然,也可以设置setExclusive(false)来关闭互斥,从而实现多选功能。即使这样,如之前所言 - 强烈建议使用众所周知的约定。所以,如果要实现多选功能,建议选择QCheckBox。

更多参考

时间: 2024-10-29 10:07:39

Qt之QRadioButton的相关文章

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

Qt之QAbstractButton

简述 QAbstractButton类是按钮部件的抽象基类,提供了按钮所共有的功能. QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并指定如何绘制按钮. QAbstractButton提供了点击和勾选按钮.QRadioButton和QCheckBox类只提供了勾选按钮,QPushButton和QToolButton提供了点击按钮,如果需要的话,它们还可以提供切换行为. 任何按钮,都可以显示一个包含文本和图标的标签.setText()用来设置文本,se

Qt之QCheckBox

简述 QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框. QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮.这是因为它们都可以在开(选中)或者关(未选中)之间切换.区别是对用户选择的限制:单选框定义了"多选一"的选择,而复选框提供的是"多选多"的选择. 尽管在技术上可以通过复选框来实现单选框的行为,反之亦然,但还是强烈建议使用众所周知的约定. 简述 详细描述 共有函数 信号 示例 三态复选框 效果 源

Qt之QToolButton

简述 QToolButton类提供了用于命令或选项可以快速访问的按钮,通常可以用在QToolBar里面. 工具按钮和普通的命令按钮不同,通常不显示文本,而显示图标. 简述 详细描述 常用接口 更多参考 详细描述 当使用QToolBar::addAction()添加一个新的(或已存在的)QAction至工具栏时,工具按钮通常被创建 .也可以用同样的方式构建工具按钮和其它部件,并设置它们的布局. QToolButton支持自动浮起,在自动浮起模式中,只有在鼠标指向它的时候才绘制三维框架.当按钮被用在

Qt之QPushButton

简述 前面章节我们分享过Qt之QAbstractButton,讲解了QAbstractButton的基本用法,本节着重讲解QPushButton. 简述 常用状态 效果 源码 QSS 更多参考 关于QPushButton的介绍,主要涉及setAutoDefault.setDefault.setMenu,前两个比较复杂,牵扯源码分析,这里暂不讲解,后面我会专门写一篇文章来说明,下面我们主要介绍按钮如何设置菜单. 常用状态 效果 源码 // 菜单 QMenu *pMenu = new QMenu(t

Qt之自定义控件(开关按钮)

简述 接触过IOS系统的童鞋们应该对开关按钮很熟悉,在设置里面经常遇到,切换时候的滑动效果比较帅气. 通常说的开关按钮,有两个状态:on.off. 下面,我们利用自定义控件来实现一个开关按钮. 简述 原理 源码 示例 效果 源码 更多参考 原理 重写鼠标按下事件(mousePressEvent).释放事件(mouseReleaseEvent),用于切换开关状态. 重写绘制事件(paintEvent),用于绘制开关效果. 使用QTimer,定时刷新,让开关切换时产生动画效果. 其余接口用于扩展,也

Qt之QSS(样式表语法)

简述 Qt样式表以下统称QSS的术语和语法规则几乎和CSS相同.如果你熟悉CSS可以快速浏览以下内容. 简述 样式规则 选择器类型 子控件 伪选择器 解决冲突 级联效应 继承性 Namespaces中的部件 设置对象属性 更多参考 样式规则 QSS包含了一个样式规则序列一个样式规则由一个选择器和声明组成选择器指定哪些部件由规则影响声明指定哪些属性应该在部件上进行设置.例如 QPushButton { color: red } 上面的例子中QPushButton是选择器{ color: red }

c++-Qt为啥在构造函数里建立的radiobutton不显示

问题描述 Qt为啥在构造函数里建立的radiobutton不显示 MainWidget::MainWidget(QWidget *parent) : QMainWindow(parent) ui(new Ui::MainWidget){ int ij; for(i=0;i<10;i++) for(j=0;j<19;j++) { radio_arr[i][j] = new QRadioButton; init_RadioButton(radio_arr[i][j]40+j*3860+i*38);

[Qt教程] 第45篇 进阶(五)Qt样式表

[Qt教程] 第45篇 进阶(五)Qt样式表 楼主  发表于 2013-9-13 15:43:55 | 查看: 329| 回复: 1 Qt样式表 版权声明 该文章原创于Qter开源社区 导语 一个完善的应用程序不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友善,更加吸引用户.作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制. Qt样式表是一个可以自定义部件外观的十分强大的机制.Qt样式表的概念.术语和语法都受到了HTML的层叠样式表(Cascading S