`
ydbc
  • 浏览: 778692 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

QButtonGroup的简单应用

 
阅读更多

QButtonGroup的简单应用

所有代码都是在qt3.3.8+fedora8下运行的。

QButtonGroup用于统一管理一组QButton按钮。理论上所有继承自QButton的按钮类都可以使用。这里以QPushButton和QRadioButton为例演示。
按钮分组的作用主要用在项目选择上,可以单选,也可以多选,根据属性设置而定。

头文件: <qbuttongroup.h>

主要属性和函数:
int id:
按钮的标签,可以用这个标签来获得或操作组里的各个按钮。

bool exclusive:
This property holds whether the button group is exclusive.
If this property is TRUE, then the buttons in the group are toggled, and to untoggle a button you must click on another button in the group. The default value is FALSE.
Set this property's value with setExclusive() and get this property's value with isExclusive().
独占属性
它标示了这个按钮组是否只能有一个按钮处于激活状态。
如果这个属性是TRUE,那么组里所有按钮都被toggled(不太会翻译这个词),要想取消一个按钮,必须点击另一个按钮。默认是FALSE。
设置该属性用setExclusive()函数;获得用isExclusive()。

insert(QButton *button, int id=-1)
向按钮组里添加一个按钮。

setButton(id)
使id所代表的按钮被选中

完整测试代码:
#ifndef GROUPBUTTONPAGE_H
#define GROUPBUTTONPAGE_H

#include <qpushbutton.h>
#include <qradiobutton.h>
#include <qlabel.h>
#include <qbuttongroup.h>
#include <qwidget.h>
#include <qlayout.h>

class GroupButtonPage : public QWidget
{
Q_OBJECT
public:
GroupButtonPage(QWidget *parent=0, const char *name=0, WFlags f = 0) : QWidget(parent, name, f)
{
QVBoxLayout *vBox = new QVBoxLayout(this);
vBox->setSpacing(10);
setRadioButtonGroup(vBox);
setPushButtonGroup(vBox);
};

private slots:
void resetRadioButtonGroup(int id);
void resetPushButtonGroup(int id);

private:
QButtonGroup *m_radioButtonGroup;
QButtonGroup *m_pushButtonGroup;

void setRadioButtonGroup(QLayout *l);
void setPushButtonGroup(QLayout *l);
};

inline void GroupButtonPage::setRadioButtonGroup(QLayout *l){
m_radioButtonGroup = new QButtonGroup(this);
connect(m_radioButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetRadioButtonGroup(int)));
//m_radioButtonGroup->setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
m_radioButtonGroup->hide();//将buttonGroup隐藏起来(只显示按钮就行了)
//QButtonGroup是没有布局管理的,需要借助layout类实现
QHBoxLayout *hBox = new QHBoxLayout(l);
hBox->setSpacing(5);
//
hBox->addWidget(new QLabel("radiobutton按钮组:", this));
hBox->addWidget(m_radioButtonGroup);
//向buttonGroup里放三个radioButton
QRadioButton *btn1 = new QRadioButton("按钮一", this, "radiobutton1");
hBox->addWidget(btn1);
m_radioButtonGroup->insert(btn1);
QRadioButton *btn2 = new QRadioButton("按钮二", this, "radiobutton2");
hBox->addWidget(btn2);
m_radioButtonGroup->insert(btn2);
QRadioButton *btn3 = new QRadioButton("按钮三", this, "radiobutton3");
//btn3->setToggleButton(true);//QRadioButton::setToggleButton()是受保护的,因为默认就是true的。
hBox->addWidget(btn3);
m_radioButtonGroup->insert(btn3);
//设置第一个按钮被选中
m_radioButtonGroup->setButton(0);
}

inline void GroupButtonPage::setPushButtonGroup(QLayout *l){
m_pushButtonGroup = new QButtonGroup(this);
connect(m_pushButtonGroup, SIGNAL(clicked(int)), this, SLOT(resetPushButtonGroup(int)));
m_pushButtonGroup->setExclusive(true);//按钮间互斥选中,也就是说同时只能有一个被选中状态
m_pushButtonGroup->hide();//将buttonGroup隐藏起来(只显示按钮就行了)
//QButtonGroup是没有布局管理的,需要借助layout类实现
QHBoxLayout *hBox = new QHBoxLayout(l);
hBox->setSpacing(5);
//
hBox->addWidget(new QLabel("pushbutton按钮组:", this));
hBox->addWidget(m_pushButtonGroup);
//向buttonGroup里放三个pushButton
QPushButton *btn1 = new QPushButton("按钮一", this, "pushbutton1");
btn1->setToggleButton(true);
hBox->addWidget(btn1);
m_pushButtonGroup->insert(btn1);
QPushButton *btn2 = new QPushButton("按钮二", this, "pushbutton2");
btn2->setToggleButton(true);
hBox->addWidget(btn2);
m_pushButtonGroup->insert(btn2);
QPushButton *btn3 = new QPushButton("按钮三", this, "pushbutton3");
btn3->setToggleButton(true);
hBox->addWidget(btn3);
m_pushButtonGroup->insert(btn3);
//设置第一个按钮被选中
m_pushButtonGroup->setButton(0);
}

inline void GroupButtonPage::resetRadioButtonGroup(int id){
m_radioButtonGroup->setButton(id);
qDebug("GroupButtonPage::resetRadioButtonGroup: id=%d", id);
qDebug("GroupButtonPage::resetRadioButtonGroup: name=%s", m_radioButtonGroup->selected()->name());
}

inline void GroupButtonPage::resetPushButtonGroup(int id){
m_pushButtonGroup->setButton(id);
qDebug("GroupButtonPage::resetPushButtonGroup: id=%d", id);
qDebug("GroupButtonPage::resetPushButtonGroup: name=%s", m_pushButtonGroup->selected()->name());
}

#endif //GROUPBUTTONPAGE_H

分享到:
评论

相关推荐

    qt简易计算器

    * QtGui/QButtonGroup:提供了按钮组的支持,允许开发者创建一个按钮组。 * QtGui/QDialog:提供了对话框的支持,允许开发者创建一个对话框。 * QtGui/QHeaderView:提供了表头视图的支持,允许开发者创建一个表头...

    pyqt5 buttons按钮简单操作(一)

    通过组合使用QPushButton、QCheckBox、QRadioButton和QButtonGroup,你可以构建出复杂的用户界面,满足各种应用需求。在实际开发中,记得结合信号和槽机制,以便在用户与按钮交互时执行相应的逻辑操作。

    QT回顾-Qt中的控件QCheckedButton测试程序

    通过这些知识点,我们可以构建一个简单的QRadioButton测试程序,包含一组互斥的单选按钮,用户选择后触发相应的功能。理解并熟练运用这些概念,将有助于开发出功能丰富的Qt应用程序。在实际项目中,还可以结合其他...

    QCheckbox分析信号处理单选多选分组单选.7z

    QCheckbox是QWidget类的子类,广泛应用于GUI应用程序,特别是在需要用户进行简单是/否选择的场景下。本资源“QCheckbox分析信号处理单选多选分组单选.7z”显然包含了对QCheckbox的深入探讨,特别是关于其信号处理、...

    Qt_chapter2.zip

    总结来说,Qt的六种按钮的demo运行程序旨在教授Qt中各种按钮的使用,包括简单点击按钮QPushButton、工具按钮QToolButton、复选框QCheckBox、单选按钮QRadioButton、菜单栏QMenuBar以及工具栏QToolBar。理解并熟练...

    C++QT完成简单计算器程序

    ### C++QT完成简单计算器程序知识点详析 #### 一、概述 ...以上是关于"C++QT完成简单计算器程序"的相关知识点详解,通过上述内容,可以了解到该计算器应用程序的设计思路、实现方法及其核心功能。

    PyQt5代码笔记源码中文完整版最新版本

    本教程为 Qt 官方文档的中文翻译版本,并进行了简单的整理。代码中包含详尽的注释,以便于理解。提供的脚本代码可以直接在本地机器上运行,旨在通过实践介绍 PyQt5 的基本概念和应用。 **新版:PySide6 代码式教程*...

    QT课程设计报告

    QT课程设计报告主要介绍了如何使用QT4开发一个简单的数字记忆游戏。这个项目旨在让学生掌握QT框架,特别是其GUI设计和事件处理能力。以下是该报告的关键知识点: 1. **QT框架**:QT是一个跨平台的应用程序开发框架...

    shuzijianpan.rar_QT 数字键盘_qt 透明_qt数字键盘_qt键盘_信号槽

    QButtonGroup *buttonGroup = new QButtonGroup(window); for (int i = 0; i ; i++) { QPushButton *button = new QPushButton(QString::number(i)); button-&gt;setFlat(true); // 设置为无边框样式 layout-&gt;...

    关于Qt的常用类介绍

    17. **QButtonGroup**: 用于管理一组QAbstractButton的子类,如QPushButton,方便处理多个按钮的交互。 18. **QCache**: 实现了一个缓存模板类,可以用于存储和检索对象,以提高性能。 19. **QCalendarWidget**: ...

    用python+pyqt5手工编写一个含交互界面的简易的词法分析器

    综上所述,这个项目展示了如何利用Python和PyQt5结合编译原理,构建一个简易的词法分析器,并提供了一个交互式的用户界面。开发者不仅需要理解Python编程和GUI设计,还需要掌握编译原理中词法分析的相关概念。通过...

    Qt常用类及其中文的介绍全.doc

    - 可用于实现简单的锁机制或计数器。 #### QAtomicPointer - 原子指针操作 - **简介**:`QAtomicPointer` 类提供了一个平台无关的原子指针类型,用于实现线程安全的指针操作。 - **功能**: - 支持原子性的指针...

Global site tag (gtag.js) - Google Analytics