(1)源码来自于头文件 qgroupbox . h :
#ifndef QGROUPBOX_H
#define QGROUPBOX_H
#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qframe.h>
/*
QT_CONFIG宏实现了对 Qt特性的安全编译时检查。特性可以处于三种状态:
0 或未定义:在测试时会引发编译错误
-1:该功能不可用
1:该功能可用
The QT_CONFIG macro implements a safe compile time check for features of Qt.
Features can be in three states:
0 or undefined: This will lead to a compile error when testing for it
-1: The feature is not available
1: The feature is available
*/
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)
#define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1,\
"Required feature " #feature " for file " __FILE__ " not available.")
QT_REQUIRE_CONFIG(groupbox); //这里是在编译前确保本模块的源码已存在。模块化编程
QT_BEGIN_NAMESPACE //说明本容器定义在 QT 的全局空间里
class QGroupBoxPrivate;
class QStyleOptionGroupBox;
class Q_WIDGETS_EXPORT QGroupBox : public QWidget //所有控件的基类
{
Q_OBJECT //又插入了这个宏,以释放一些成员函数与成员方法
//此属性包含组框标题文本。 没有默认的标题文本。
//如果标题包含一个连字符ampersand(&)和一个字母,则组框标题文本将具有键盘快捷键。
// g->setTitle("&User information");
//在上面的例子中,Alt+U 将键盘焦点移动到组框。
//请参阅 QShortcut 文档以获取详细信息(要显示实际的等号,请使用'&&')。
Q_PROPERTY(QString title READ title WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
//此属性包含组框标题的对齐方式。
//大多数样式将标题放在框架的顶部。可以使用以下列表中的单个值指定标题的水平对齐方式:
//Qt::AlignLeft 将标题文本与组框的左侧对齐。
//Qt::AlignRight 将标题文本与组框的右侧对齐。
//Qt::AlignHCenter将标题文本与组框的水平中心对齐。
//此属性表示组框是平涂 painted flat还是带有边框.
//-个组框通常由一个周围的框架组成,顶部有一个标题。
//如果启用了此属性,则大多数样式只会绘制框架的顶部;否则,会绘制整个框架。
//默认情况下,此属性被禁用,即除非明确指定,否则组框不是扁平的。
//注:在某些样式中,扁平和非扁平的组框具有类似的表示方式,可能不像其他样式中那样明显区分。
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
//这个属性表示组框的标题中是否有一个复选框。
//如果此属性为真,则组框使用复选框显示其标题,而不是使用普通标。
//如果复选框被选中,则组框的子项被启用;否则,它们被禁用且不可访问。
//默认情况下,组框不可勾选。
//如果为组框启用了此属性,则也会首先进行检查,以确保其内容已启用。
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled USER true)
//此属性表示组框是否已选中.
//如果组框是可检查的,则显示带有复选框。
//如果复选框被选中,则组框的子项被启用;否则,子项被禁用,用户无法访问。
//默认情况下,可检查的复选框也会被选中。
private:
Q_DISABLE_COPY(QGroupBox)
Q_DECLARE_PRIVATE(QGroupBox)
Q_PRIVATE_SLOT(d_func(), void _q_setChildrenEnabled(bool b))
public:
//Constructs a group box widget with the given parent but with no title.
explicit QGroupBox(QWidget *parent = nullptr); //构造函数
explicit QGroupBox(const QString &title, QWidget *parent = nullptr);
//Constructs a group box with the given title and parent.
~QGroupBox();
QSize minimumSizeHint() const override;
//Q_PROPERTY(QString title READ title WRITE setTitle)
QString title() const;
void setTitle(const QString &title);
//Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Qt::Alignment alignment() const;
void setAlignment(int alignment);
//Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
bool isFlat() const;
void setFlat(bool flat);
//Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
bool isCheckable() const;
void setCheckable(bool checkable);
//Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled USER true)
bool isChecked() const;
public Q_SLOTS:
void setChecked(bool checked);
Q_SIGNALS:
//这个信号是在复选框被激活时发出的(即,当鼠标光标在按钮内时按下然后释放),
//或者当快捷键被键入时发出的。值得注意的是,如果调用setChecked(),则不会发出此信号。
//如果选中复选框,则 checked 为 true;如果未选中复选框,则 checked 将为 false。
void clicked(bool checked = false);
void toggled(bool on);
//如果复选框是可检查的,则在切换复选框时发出此信号。
//如果复选框被选中,则on为true;否则,为false
//注:已检查属性的通知信号。
protected: //只可以被子类使用,外部不可用
//使用本 QGroupBox的值初始化 option。
//当子类需要 QStyleOptionGroupBox但不希望自己填充所有信息时,此方法非常有用。
virtual void initStyleOption(QStyleOptionGroupBox *option) const;
bool event(QEvent *event) override; //全是继承来的事件
void childEvent(QChildEvent *event) override;
void resizeEvent(QResizeEvent *event) override;
void paintEvent(QPaintEvent *event) override;
void changeEvent(QEvent *event) override;
void focusInEvent(QFocusEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
};
QT_END_NAMESPACE
#endif // QGROUPBOX_H
(2) 验证属性 flat,看看此属性不同时,绘制的 QGroupBox 的外观有何区别 :
(3)
谢谢