#include "widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
/* 主窗体设置位置和显示的大小及背景颜色 */
this->setGeometry(0, 0, 800, 480);
/*将主窗口背景色设置为天蓝色(不透明度为 100%)*/
this->setStyleSheet("Widget {background-color: rgba(135, 206, 235, 100%);}");
/* 实例化对象 */
createTristateCheckbox();
createMultiSelectCheckboxes();
layout1 = new QHBoxLayout;
layout2 = new QHBoxLayout;
layout = new QVBoxLayout;
layout1->addWidget(label1);
layout1->addWidget(tristateCheckbox);
layout2->addWidget(label2);
layout2->addWidget(multiSelectCheckbox1);
layout2->addWidget(multiSelectCheckbox2);
layout->addLayout(layout1);
layout->addLayout(layout2);
setLayout(layout);
connectSignalsAndSlots();
setWindowTitle("_qcheckbox Example");
}
Widget::~Widget()
{
}
void Widget::createTristateCheckbox()
{
tristateCheckbox = new QCheckBox("三态复选框:半选中", this);
tristateCheckbox->setTristate(true);
tristateCheckbox->setCheckState(Qt::PartiallyChecked);
tristateCheckbox->setTristate(true);
label1 = new QLabel(this);
label1->setText(" 第一组:");
}
void Widget::createMultiSelectCheckboxes()
{
multiSelectCheckbox1 = new QCheckBox("多选框1:选中", this);
multiSelectCheckbox2 = new QCheckBox("多选框2:未选中", this);
multiSelectCheckbox1->setCheckState(Qt::Checked);
multiSelectCheckbox2->setCheckState(Qt::Unchecked);
multiSelectButtonGroup = new QButtonGroup(this);
multiSelectButtonGroup->addButton(multiSelectCheckbox1);
multiSelectButtonGroup->addButton(multiSelectCheckbox2);
multiSelectButtonGroup->setExclusive(false);//多选
// multiSelectCheckbox1->setChecked(true);
// multiSelectCheckbox2->setChecked(false);
label2 = new QLabel(this);
label2->setText(" 第二组:");
}
void Widget::connectSignalsAndSlots()
{
connect(tristateCheckbox, SIGNAL(stateChanged(int)), this, SLOT(tristateCheckboxChanged(int)));
// connect(multiSelectButtonGroup, SIGNAL(buttonToggled(int)), this, SLOT(multiSelectCheckboxChanged(int)));
#ifdef QT_ARM_PLATFORM
connect(multiSelectButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(onButtonClicked(int)));
#else
connect(multiSelectButtonGroup, SIGNAL(buttonToggled(int,bool)), this, SLOT(multiSelectCheckboxChanged(int,bool)));
#endif
}
void Widget::tristateCheckboxChanged(int state)
{
qDebug() << "三态复选框状态:" << state;
/* 判断checkBox的state状态,设置checkBox的文本 */
switch (state) {
case Qt::Checked:
/* 选中状态 */
tristateCheckbox->setText("三态复选框:选中");
break;
case Qt::Unchecked:
/* 未选中状态 */
tristateCheckbox->setText("三态复选框:未选中");
break;
case Qt::PartiallyChecked:
/* 半选状态 */
tristateCheckbox->setText("三态复选框:半选中");
break;
default:
break;
}
}
void Widget::onButtonClicked(int id)
{
QCheckBox *checkbox = qobject_cast<QCheckBox *>(multiSelectButtonGroup->button(id));
int checked = checkbox->isChecked();
qDebug() << "多选框" << id + 1 << " 的状态是 " << checked;
if(checkbox==multiSelectCheckbox1)
{
if (checked) {
/* 选中状态 */
multiSelectCheckbox1->setText("多选框1:选中");
qDebug() << checkbox->text() << "is checked.";
} else {
multiSelectCheckbox1->setText("多选框1:未选中");
qDebug() << checkbox->text() << "is unchecked.";
}
}
else
{
if (checked) {
/* 选中状态 */
multiSelectCheckbox2->setText("多选框2:选中");
qDebug() << checkbox->text() << "is checked.";
} else {
multiSelectCheckbox2->setText("多选框2:未选中");
qDebug() << checkbox->text() << "is unchecked.";
}
}
}
void Widget::multiSelectCheckboxChanged(int id, bool checked)
{
QCheckBox *checkbox = qobject_cast<QCheckBox *>(multiSelectButtonGroup->button(id));
qDebug() << "多选框 " << id + 1 << " 的状态是 " << checked;
if(checkbox==multiSelectCheckbox1)
{
if (checked) {
/* 选中状态 */
multiSelectCheckbox1->setText("多选框1:选中");
qDebug() << checkbox->text() << "is checked.";
} else {
multiSelectCheckbox1->setText("多选框1:未选中");
qDebug() << checkbox->text() << "is unchecked.";
}
}
else
{
if (checked) {
/* 选中状态 */
multiSelectCheckbox2->setText("多选框2:选中");
qDebug() << checkbox->text() << "is checked.";
} else {
multiSelectCheckbox2->setText("多选框2:未选中");
qDebug() << checkbox->text() << "is unchecked.";
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt常用的按钮控件编程(三)- QRadioButton 按钮
需积分: 0 0 下载量 96 浏览量
2023-05-30
12:07:07
上传
评论
收藏 8KB GZ 举报
温馨提示
本例程为QRadioButton 单选按钮编程。通过这个例子,初步了解QT管理资源机制,以及如何分组管理QRadioButton 单选按钮。项目演示如何使用默认的分组和 QButtonGroup 进行互斥设置,保证多个选项所在的组内只有一个被选中。项目使用样式表文件将两组按钮使用不同的样式表进行外观设置。 文章中使用的例程和内容都是在chatgpt的帮助下完成的,例程经过测试通过。
资源推荐
资源详情
资源评论
收起资源包目录
_qcheckbox.tar.gz (11个子文件)
_qcheckbox
widget.cpp 5KB
style.qss 334B
_qcheckbox.pro 1KB
readme 544B
main.cpp 1KB
_qcheckbox.pro.user 30KB
res.qrc 216B
images
unchecked.png 1KB
indeterminate.png 1KB
checked.png 1KB
widget.h 869B
共 11 条
- 1
资源评论
robin861109
- 粉丝: 20
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功