简介
QCheckBox 是一个带有文本标签的复选框小部件。
QCheckBox 是一个选项按钮,可以切换为选中(被勾选)或未选中(未勾选)。复选框通常用于表示应用程序中可以启用或禁用的功能,而不会影响其他功能。可以实现不同类型的行为。例如,可以使用 QButtonGroup 逻辑上将多个复选框分组,从而实现互斥的复选框。但是,QButtonGroup 不提供任何视觉表示。
下图进一步说明了互斥和非互斥复选框之间的区别:
Exclusive vs Non-Exclusive Checkboxes
在上面的示例图中,左侧显示互斥复选框,该组复选框只能选中一个。右侧显示了非互斥复选框,可以选中多个。
使用 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),编辑框将被设置为可编辑;
如果复选框未被选中或处于第三种状态,编辑框将被设置为不可编辑。
这样,当复选框的状态发生变化时,编辑框的可编辑性会随之改变,实现了通过复选框控制编辑框是否可编辑的功能。