QT6 源(43):class QGroupBox : public QWidget ,最常用的容器类 QGroupBox 的源码
(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 available1: 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)
谢谢