QGroupBox 类(组框)

一、QGroupBox 类(组框)                    

1、 QGroupBox(组框),直接继承自 QWidget 类,因此使用该类创建的对象,可作为窗口使用, 组框在外观上是可见的。
2、 QGroupBox 类(组框),提供了一个顶部带有标题的箱形框架,然后在该框架中可以显示其
他部件,组框的主要作用是把各部件组织在一起,以方便管理。
3、 QGroupBox 不会自动布置组框内的子部件。
4、组框中的子部件可以是任何部件,通常是单选按钮和复选按钮。


5、 QGroupBox 类中的属性
①、 title: QString 访问函数: QString title() const; void setTitle(const QString &);
此属性描述组框的标题文本

②、 alignment: Qt::Alignment
访问函数: Qt::Alignment alignment()const; void setAlignment(int);
 此属性描述组框标题文本的对齐方式,大多数样式都将标题放于组框的顶部。
 Qt::Alignment 枚举是用于描述对齐方式的,对于组框标题的水平对齐方式可取
值为: Qt::AlignLeft(左对齐, 默认值)、 Qt::AlignRight (右对齐)、 Qt::AlignHCenter
(居中对齐),
 注意:该枚举的设置函数 setAlignment(int)的参数是 int 型,也就是说可以直接使
用 Qt::Alignment 枚举所代表的整数值来指定对齐方式。 比如 setAlignment (1) ;
表示左对齐。


③、 checkable: bool 访问函数: bool isCheckable() const; void setCheckable (bool);
此属性用于描述组框的标题是否具有复选框(见右图),即组框是否可被选中,若该属性为 true,当取消选中标题的复选框时,
组框中的子部件都会被禁用。默认为 false(即不可被选中)

                
④、 checked: bool 访问函数: bool isChecked() const; void setChecked (bool);
该属性描述组框是否被选中,使用此属性需要启用 checkable 属性。 默认为 true。


⑤、 flat: bool 访问函数: bool isFlat() const; void setFlat (bool);
此属性描述组框是否具有边框,若此属性为 true,则只绘制组框顶部的边框(见右图),也就是说组框左、右和下侧的边框不会被绘制。默认为 false(禁用)。
注意:在某些样式中,有边框和无边框可能具有相似的形式。

                

6、 QGroupBox 类中的构造函数信号

①、 QGroupBox (QWidget* parent = Q_NULLPTR); //构造函数
QGroupBox (const QString &title , QWidget* parent = Q_NULLPTR);    //构造函数
②、 void clicked (bool checked = false);    //信号

发送时机同其他 clicked 信号,但要注意:若调用 setChecked()发不会发送该信号。
③、 void toggled (bool on); //信号
若组框是可被选中的,则在组框的状态被切换时发送该信号,若组选被选中,则 on
为 true,否则为 false。
7、该类没有其他特别的成员函数。

#include<QtWidgets>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
	QApplication a(argc, argv);
	QWidget w;
    //组框
	QGroupBox *box = new QGroupBox(&w); box->move(33, 33); box->resize(120, 150);
	QGroupBox *box1 = new QGroupBox(&w); box1->move(165, 33); box1->resize(110, 75);
    //按钮组
	QButtonGroup *b = new QButtonGroup; 
	
	//把按钮加入到组框 QGroupBox *box,QGroupBox *box1中
	QRadioButton *rb1 = new QRadioButton("AAA", box);
	QRadioButton *rb2 = new QRadioButton("BBB", box);
	QCheckBox *cb1 = new QCheckBox("CCC", box); 
	QCheckBox *cb2 = new QCheckBox("DDD", box);
	QCheckBox *cb3 = new QCheckBox("EEE", box1); 
	QCheckBox *cb4 = new QCheckBox("FFF", box1);
	
	//将属于同一组的按钮加入到按钮组b:(和组框无关,只是按钮组属性!)
	//1.不加入按钮组b:不具有排他性(可以多选)
	//b->addButton(rb1); b->addButton(rb2); b->addButton(cb1, 2); b->addButton(cb2);
	//2.加入按钮组b:具有排他性(只能选中按钮组中的一个按钮)
	b->addButton(rb1); b->addButton(rb2); b->addButton(cb1, 2); b->addButton(cb2);
	//布局组框 box 中的子部件
	rb1->move(22, 22); rb2->move(22, 50); cb1->move(22, 77); cb2->move(22, 105);
	//布局组框 box1 中的子部件
	cb3->move(22, 11); cb4->move(22, 40);
	
    //重点!和组框相关
	box->setTitle("XXXXX"); //设置标题
	box->setAlignment(Qt::AlignHCenter); //居中显示标题
	box->setCheckable(true); //组框 box 可被选中
	box1->setFlat(true); //组框 box1 无边框

	w.resize(300, 200); w.show(); return a.exec();
}

运行结果及说明

按钮组:QButtonGroup、组框:QGroupBox;

二、 QButtonGroup 类(按钮组)
1、为方便讲解,本文把由 QButtonGroup 类创建的对象称为按钮组。
2、 QButtonGroup 继承自 QObject 类, 因此该类创建的不是一个窗口, 使用该类创建的对象
是不可见的,即从外观上无法分辨哪些按钮是一组的。 该类提供了一个容器,用于组织按
钮部件(即可以把按钮放于该容器内),这样可以方便管理组中的每个按钮,通常见到的就
是把单选按钮放于一组按钮组中。
3、默认情况下,按钮组是具有排他性的或称为是独占的,即在任何时候只能选中按钮组中的
一个按钮, 选中一个按钮会取消其他已选中的按钮。
4、按钮组中的按钮通常是可被选中的按钮, QCheckBox(复选按钮)通常用于非排他性组。
5、排他性按钮组的特点:
 在排他性按钮组中,用户不能通过点击来取消当前已经被选中的按钮,
 在排他性按钮组中,当前选中的按钮可使用 checkedButton()获取

 创建了一个排他性按钮组,则在初始状态时应选中组中的一个按钮,否则组中的按
钮在初始状态时将没有按钮被选中。
6、 单击一个按钮,会发送 buttonClicked()信号,若该按钮是独占组中的可选中按钮,则意味
着,该按钮已被选中。
7、 QButtonGroup 还可在整数和按钮间进行映射,可使用 setId()函数,把一个整数 id 分配给
一个按钮,并使用 id()检索它。当前被选中的按钮的 id,可使用 checkedId()函数获取,并
且有一个重载的信号 buttonClicked()发出按钮的 id。 id-1 是 QButtonGroup 保留的,意思是
“没有这样的按钮”。


8、 QButtonGroup 类中的属性信号
①、 exclusive: bool 访问函数: bool exclusive() const; void setExclusive(bool);
该属性描述按钮组是否具有排他性,默认为 true(即具有排他性)
②、 void buttonClicked(QAbstractButton* button); //信号
void buttonClicked(int id); //信号
以下情形会发送以上信号:按下按钮然后释放时,键入快捷键时,调用
QQAbstractButton::Click()或 QAbstractButton::animateClick()时。
③、 void buttonPressed(QAbstractButton* button); //信号
void buttonPressed(int id); //信号
当按下按钮时发送以上信号
④、 void buttonReleased(QAbstractButton* button); //信号
void buttonReleased(int id); //信号
当释放按钮时发送以上信号
⑤、 void buttonToggled(QAbstractButton* button, bool checked); //信号, qt5.2
void buttonToggled(int id , bool checked); //信号, qt5.2
当按钮被切换时发送以上信号,若按钮被选中,则 checked 为 true,若未选中,则为
false。


9、 QButtonGroup 类中的函数
①、 QButtonGroup(QObject* parent = Q_NULLPTR); //构造函数:
②、 void addButton (QAbstractButton* button, int id= -1);
将给定的按钮 button 添加到按钮组中。 若 id 为-1,则会自动分配 id 给按钮, 自动分
配的 id 从-2 开始,保证为负值
。 若要分配自己的 id,请使用正值以避免冲突。
③、 void setId(QAbstractButton* button , int id); 设置按钮 button 的 id,注意 id 不能为-1
④、 void removeButton(QAbstractButton* button); 从按钮组中删除按钮 button
⑤、 int id(QAbstractButton* button) const;
返回按钮 button 的 id,若不存在这样的按钮,则返回-1。
⑥、 QAbstractButton* button(int id) const; 返回指定 id 的按钮,若该按钮不存在,则返回 0。
⑦、 QList<QAbstractButton*> buttons() const; 返回按钮组中按钮的列表,该列表有可能为空。
⑧、 QAbstractButton* checkedButton() const;
返回按钮组中被选中的按钮,若没有按钮被选中,则为 0。
⑨、 int checkedId() const;
返回被选中的按钮的 id,若没有按钮被选中,则为-1。
⑩、 注意: 要获取按钮所属的按钮组,需使用 QAbstractButton::group()函数。

//m.h 文件的内容
#ifndef M_H
#define M_H
#include<QtWidgets>
#include <iostream>
using namespace std;
class B :public QButtonGroup {
	Q_OBJECT
public slots:
	void f(QAbstractButton* b) {
		int i = id(b); //获取按钮 b 的 id
		QAbstractButton* c = checkedButton(); //获取当前被选中的按钮
		cout << "id=" << i << endl;
		cout << "button=" << c->objectName().toStdString() << endl;
	}
};
#endif // M_H


//m.cpp 文件的内容
#include "m.h"
int main(int argc, char *argv[]) {
	QApplication a(argc, argv);
	QWidget w; B *b = new B; //创建按钮组
	QRadioButton *rb1 = new QRadioButton("AAA", &w);
	QRadioButton *rb2 = new QRadioButton("BBB", &w);
	QCheckBox *cb1 = new QCheckBox("CCC", &w); QCheckBox *cb2 = new QCheckBox("DDD", &w);
	QCheckBox *cb3 = new QCheckBox("EEE", &w);
	//设置对象名。
	rb1->setObjectName("AAA"); rb2->setObjectName("BBB");
	cb1->setObjectName("CCC"); cb2->setObjectName("DDD"); cb3->setObjectName("EEE");
	
	//把按钮添加到按钮组 b 之中
	b->addButton(rb1); //未指定 id,默认为-2
	b->addButton(rb2); //未指定 id,默认为-3(默认值依次递减)
	b->addButton(cb1, 2); //指定 id 为 2
	b->addButton(cb2); //未指定 id,此时默认为-4(默认值依次递减)
	b->setId(cb2, 3); //把 cb2 的 id 设置为 3。
	
	//布局按钮
	rb1->move(22, 22); rb2->move(22, 50); cb1->move(22, 77);
	cb2->move(22, 105); cb3->move(99, 22);
	//关联信号和槽
	QObject::connect(b, SIGNAL(buttonClicked(QAbstractButton*)), b, SLOT(f(QAbstractButton*)));
	
	w.resize(300, 200); w.show(); return a.exec();
}

结果说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值