【Qt控件之QCheckBox】概述及示例
  yQAl4kecrO8W 2023年12月23日 66 0


简介

QCheckBox 是一个带有文本标签的复选框小部件。
QCheckBox 是一个选项按钮,可以切换为选中(被勾选)或未选中(未勾选)。复选框通常用于表示应用程序中可以启用或禁用的功能,而不会影响其他功能。可以实现不同类型的行为。例如,可以使用 QButtonGroup 逻辑上将多个复选框分组,从而实现互斥的复选框。但是,QButtonGroup 不提供任何视觉表示。

下图进一步说明了互斥和非互斥复选框之间的区别:

Exclusive vs Non-Exclusive Checkboxes

【Qt控件之QCheckBox】概述及示例_复选框


在上面的示例图中,左侧显示互斥复选框,该组复选框只能选中一个。右侧显示了非互斥复选框,可以选中多个。

使用 QCheckBox,可以在应用程序中方便地实现开关选项和多选选项的功能。

当复选框被选中或取消选中时,它会发出 stateChanged() 信号。如果希望每次复选框更改状态时触发某个操作,可以连接到此信号。可以使用 isChecked() 方法查询复选框是否被选中。

除了常见的选中和未选中状态外,QCheckBox 还可选择性地提供第三种状态来表示“未更改”。这在需要让用户既不选中也不取消选中复选框时非常有用。如果需要这种第三种状态,请使用 setTristate() 方法启用,并使用 checkState() 方法查询当前的切换状态。

与 QPushButton 一样,复选框显示文本和可选的小图标。可以使用 setIcon() 方法设置图标。文本可以在构造函数中设置,也可以使用 setText() 方法进行设置。可以通过在首选字符前加上“&”来指定快捷键。例如:

QCheckBox *checkbox = new QCheckBox("C&ase sensitive", this);

在上面的示例中,快捷键是Alt+A。为了显示实际的“&”字符,请使用“&&”。

使用 QCheckBox,可以方便地在复选框状态发生更改时触发相应的操作,并可选择显示文字和小图标。

常用函数

构造函数、常用函数、信号和槽如下所示:

构造函数

QRadioButton(QWidget* parent = nullptr)

默认构造函数,创建一个没有父部件的单选按钮。

QRadioButton(const QString& text, QWidget* parent = nullptr)

使用指定的文本创建一个没有父部件的单选按钮。

QRadioButton(const QIcon& icon, const QString& text, QWidget* parent = nullptr)

使用指定的图标和文本创建一个没有父部件的单选按钮。

常用函数

void setText(const QString& text)

设置单选按钮显示的文本。

void setChecked(bool checked)

设置单选按钮的选中状态,true为选中,false为未选中。

bool isChecked() const

返回单选按钮的选中状态,如果选中则返回true,否则返回false。

void setIcon(const QIcon& icon)

设置单选按钮显示的图标。

void setShortcut(const QKeySequence& shortcut)

设置单选按钮的快捷键。

信号和槽

void toggled(bool checked)

当单选按钮选中状态发生改变时发出的信号,参数checked表示当前的选中状态。

void clicked(bool checked = false)

当单选按钮被点击时发出的信号,参数checked表示当前的选中状态。

void pressed()

当单选按钮被按下时发出的信号。

void released()

当单选按钮被释放时发出的信号。

void toggled(bool checked)

当单选按钮的选中状态发生改变时发出的信号,参数checked表示当前的选中状态。

这些函数可以用函数名称()的方式调用,例如setText("文本")用于设置文本内容,setChecked(true)用于设置单选按钮为选中状态。信号和槽可以用connect()函数进行连接,例如connect(button, SIGNAL(clicked(bool)), this, SLOT(handleButtonClicked(bool)))用于将按钮的点击信号与槽函数handleButtonClicked(bool)进行连接。

QObject::connect(checkbox, &QCheckBox::stateChanged, [&](int state) {
    if (state == Qt::Checked) {
        // 复选框被选中的逻辑处理
    } else if (state == Qt::Unchecked) {
        // 复选框取消选中的逻辑处理
    }
});

示例

以下是一个使用 QCheckBox 的 C++ 示例,通过信号和槽来控制另一个编辑框是否可编辑:

#include <QtWidgets>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout layout(&window);

    QCheckBox checkbox("Enable Edit");
    QLineEdit edit;
    edit.setEnabled(false);

    layout.addWidget(&checkbox);
    layout.addWidget(&edit);

    QObject::connect(&checkbox, &QCheckBox::stateChanged, [&](int state) {
        edit.setEnabled(state == Qt::Checked);
    });

    window.show();

    return app.exec();
}

效果


checkbox


在示例中,创建了一个 QWidget 窗口,并在窗口的垂直布局中添加了一个 QCheckBox 复选框和一个 QLineEdit 编辑框。
初始状态下,编辑框被设置为不可编辑。

通过 QObject::connect() 函数将复选框的 stateChanged 信号连接到一个 lambda 函数中。
当复选框的状态发生变化时,lambda 函数会根据状态值来设置编辑框的可编辑性。

如果复选框被选中(state == Qt::Checked),编辑框将被设置为可编辑;
如果复选框未被选中或处于第三种状态,编辑框将被设置为不可编辑。

这样,当复选框的状态发生变化时,编辑框的可编辑性会随之改变,实现了通过复选框控制编辑框是否可编辑的功能。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

推荐阅读
yQAl4kecrO8W