1.开发背景
Qt QCheckBox 是勾选组件,具体使用方法可以参考 Qt 官方文档,这里只是记录使用过程中常用的方法示例和遇到的一些问题。
2.开发需求
QCheckBox 使用和踩坑
3.开发环境
Window10 + Qt5.12.2 + QtCreator4.8.2
4.功能简介
4.1 简单接口
QCheckBox 继承了 QAbstractButton、QWidget、QObject 和 QPaintDevice,父对象的接口都能用,另外独有接口 setCheckState 、checkState 等
4.2 信号接口
除了继承的信号,主要还是使用信号 stateChanged
5.踩坑现场
5.1 信号 stateChanged 中使用 setChecked 不会立刻刷新状态
connect(ui->checkBox_RxSaveFile, &QCheckBox::stateChanged, this, [this](int state)
{
if (state == Qt::Unchecked)
{
m_p->isRxSaveFile = false;
m_p->rxSavePath.clear();
}
else if (state == Qt::Checked)
{
/* 获取当前时间并格式化为字符串(如 "2024-01-01_12-00-00")*/
m_p->isRxSaveFile = true;
QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd_HH-mm-ss");
QString defaultFileName = "./" + timestamp + ".txt";
QString fileName = QFileDialog::getSaveFileName(this, "保存文件",
defaultFileName, "文本文件 (*.txt);;所有文件 (*)");
if (fileName.isEmpty())
{
m_p->isRxSaveFile = false;
ui->checkBox_RxSaveFile->setChecked(false);
ui->checkBox_RxSaveFile->setCheckState(Qt::Unchecked); // 需要单独设置状态
}
else
{
m_p->rxSavePath = fileName;
}
}
});
需要使用 setCheckState 设置当前的状态,不然第二次点击不会触发信号