• 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、该类没有其他特别的成员函数。

    1. #include<QtWidgets>
    2. #include <iostream>
    3. using namespace std;
    4. int main(int argc, char *argv[]) {
    5. QApplication a(argc, argv);
    6. QWidget w;
    7. //组框
    8. QGroupBox *box = new QGroupBox(&w); box->move(33, 33); box->resize(120, 150);
    9. QGroupBox *box1 = new QGroupBox(&w); box1->move(165, 33); box1->resize(110, 75);
    10. //按钮组
    11. QButtonGroup *b = new QButtonGroup;
    12. //把按钮加入到组框 QGroupBox *box,QGroupBox *box1
    13. QRadioButton *rb1 = new QRadioButton("AAA", box);
    14. QRadioButton *rb2 = new QRadioButton("BBB", box);
    15. QCheckBox *cb1 = new QCheckBox("CCC", box);
    16. QCheckBox *cb2 = new QCheckBox("DDD", box);
    17. QCheckBox *cb3 = new QCheckBox("EEE", box1);
    18. QCheckBox *cb4 = new QCheckBox("FFF", box1);
    19. //将属于同一组的按钮加入到按钮组b:(和组框无关,只是按钮组属性!)
    20. //1.不加入按钮组b:不具有排他性(可以多选)
    21. //b->addButton(rb1); b->addButton(rb2); b->addButton(cb1, 2); b->addButton(cb2);
    22. //2.加入按钮组b:具有排他性(只能选中按钮组中的一个按钮)
    23. b->addButton(rb1); b->addButton(rb2); b->addButton(cb1, 2); b->addButton(cb2);
    24. //布局组框 box 中的子部件
    25. rb1->move(22, 22); rb2->move(22, 50); cb1->move(22, 77); cb2->move(22, 105);
    26. //布局组框 box1 中的子部件
    27. cb3->move(22, 11); cb4->move(22, 40);
    28. //重点!和组框相关
    29. box->setTitle("XXXXX"); //设置标题
    30. box->setAlignment(Qt::AlignHCenter); //居中显示标题
    31. box->setCheckable(true); //组框 box 可被选中
    32. box1->setFlat(true); //组框 box1 无边框
    33. w.resize(300, 200); w.show(); return a.exec();
    34. }

    运行结果及说明

    按钮组: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 buttons() const; 返回按钮组中按钮的列表,该列表有可能为空。
    ⑧、 QAbstractButton* checkedButton() const;
    返回按钮组中被选中的按钮,若没有按钮被选中,则为 0。
    ⑨、 int checkedId() const;
    返回被选中的按钮的 id,若没有按钮被选中,则为-1。
    ⑩、 注意: 要获取按钮所属的按钮组,需使用 QAbstractButton::group()函数。

    1. //m.h 文件的内容
    2. #ifndef M_H
    3. #define M_H
    4. #include<QtWidgets>
    5. #include <iostream>
    6. using namespace std;
    7. class B :public QButtonGroup {
    8. Q_OBJECT
    9. public slots:
    10. void f(QAbstractButton* b) {
    11. int i = id(b); //获取按钮 b 的 id
    12. QAbstractButton* c = checkedButton(); //获取当前被选中的按钮
    13. cout << "id=" << i << endl;
    14. cout << "button=" << c->objectName().toStdString() << endl;
    15. }
    16. };
    17. #endif // M_H
    18. //m.cpp 文件的内容
    19. #include "m.h"
    20. int main(int argc, char *argv[]) {
    21. QApplication a(argc, argv);
    22. QWidget w; B *b = new B; //创建按钮组
    23. QRadioButton *rb1 = new QRadioButton("AAA", &w);
    24. QRadioButton *rb2 = new QRadioButton("BBB", &w);
    25. QCheckBox *cb1 = new QCheckBox("CCC", &w); QCheckBox *cb2 = new QCheckBox("DDD", &w);
    26. QCheckBox *cb3 = new QCheckBox("EEE", &w);
    27. //设置对象名。
    28. rb1->setObjectName("AAA"); rb2->setObjectName("BBB");
    29. cb1->setObjectName("CCC"); cb2->setObjectName("DDD"); cb3->setObjectName("EEE");
    30. //把按钮添加到按钮组 b 之中
    31. b->addButton(rb1); //未指定 id,默认为-2
    32. b->addButton(rb2); //未指定 id,默认为-3(默认值依次递减)
    33. b->addButton(cb1, 2); //指定 id 为 2
    34. b->addButton(cb2); //未指定 id,此时默认为-4(默认值依次递减)
    35. b->setId(cb2, 3); //把 cb2 的 id 设置为 3
    36. //布局按钮
    37. rb1->move(22, 22); rb2->move(22, 50); cb1->move(22, 77);
    38. cb2->move(22, 105); cb3->move(99, 22);
    39. //关联信号和槽
    40. QObject::connect(b, SIGNAL(buttonClicked(QAbstractButton*)), b, SLOT(f(QAbstractButton*)));
    41. w.resize(300, 200); w.show(); return a.exec();
    42. }

    结果说明:

  • 相关阅读:
    使用python往png写入文本 将信息隐藏于图片
    《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程
    基于PHP+MySQL的旅游景点网站的设计与开发
    JZ38 字符串的排列
    数字生活的未来:探索Web3的全新世界
    nginx启动和关闭命令
    传智教育|Git实战-上线出bug,如何代码回滚?
    【21天Python进阶学习挑战赛】[day1]正则表达式大总结
    《洛谷深入浅出基础篇》——P3405 citis and state ——哈希表
    授权控制-数据库用户分类、授权(GRANT)、收权(REVOKE)
  • 原文地址:https://blog.csdn.net/zxf347085420/article/details/133066767