美文网首页
Qt 复选对话框

Qt 复选对话框

作者: 飞扬code | 来源:发表于2019-06-14 22:54 被阅读0次

QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框。
QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮。这是因为它们都可以在开(选中)或者关(未选中)之间切换。区别是对用户选择的限制:单选框定义了“多选一”的选择,而复选框提供的是“多选多”的选择。

描述

QButtonGroup可以用来在视觉上把许多复选框组织在一起。

只要复选框被选中或者清除,都会发射一个stateChanged()信号。如果想在复选框状态改变的时候触发一个行为,请连接这个信号,可以使用 isChecked()来查询复选框是否被选中。

除了常用的选中和未选中两个状态,QCheckBox还可选地提供了第三种状态(半选)来表明“没有变化”。当需要给用户一个选中或者未选中复选框的选择时,这是很有用的。如果需要第三种状态,可以通过setTristate()来使它生效,并使用checkState()来查询当前的切换状态。

和QPushButton一样,复选框可以显示文本或者图标。文本可以通过构造函数或者setText()来设置,图标可以通过setIcon()来设置。

QCheckBox *checkbox = new QCheckBox("check", this);

重要的继承函数:text()、setText()、pixmap()、setPixmap()、accel()、setAccel()、isToggleButton()、setDown()、isDown()、isOn()、checkState()、 autoRepeat()、isExclusiveToggle()、group()、setAutoRepeat()、toggle()、pressed()、released()、clicked()、toggled()、checkState()、stateChanged()。

共有函数

//返回复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton::isChecked(),它返回一个布尔值。
Qt::CheckState checkState() const ;

//复选框是否为一个三态复选框。默认的是false,也就是说复选框只有两个状态。
bool isTristate() const ;

//设置复选框的选中状态。如果不需要三态的支持,可以使用QAbstractButton:setChecked(),它接受一个布尔值。
void setCheckState(Qt::CheckState state) ;

//设置复选框为一个三态复选框。
void setTristate(bool y = true) ;

信号

//当复选框状态发生改变,这个信号就会被发射。即:用户选中或者取消选中。
void stateChanged(int state) ;

三态复选框

三态复选框.gif
#include "widget.h"
#include "ui_widget.h"
#include <QCheckBox>
#include <QFile>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->label->setText("Click CheckBox...");
    ui->checkBox->setText(QString::fromLocal8Bit("三态复选框"));

    // 开启三态模式
    ui->checkBox->setTristate();

    // 连接信号槽
    connect(ui->checkBox, SIGNAL(stateChanged(int)), this, SLOT(onStateChanged(int)));

    QFile qss("://rc.qss");
    qss.open(QIODevice::ReadOnly);
    ui->checkBox->setStyleSheet(qss.readAll());
    qss.close();
    ui->label->setStyleSheet("color: rgb(0, 85, 255);");
}

Widget::~Widget()
{
    delete ui;
}
//槽函数,判断当前复选框状态,其中包括:选中(Qt::Checked)、半选(Qt::PartiallyChecked)、未选中(Qt::Unchecked)。
void Widget::onStateChanged(int state)
{
    if (state == Qt::Checked) // "选中"
    {
        ui->label->setText("Checked");
    }
    else if(state == Qt::PartiallyChecked) // "半选"
    {
        ui->label->setText("PartiallyChecked");
    }
    else // 未选中 - Qt::Unchecked
    {
        ui->label->setText("Unchecked");
    }
}

样式表

QCheckBox{
        spacing: 5px;
        color: white;
}
QCheckBox::indicator {
        width: 17px;
        height: 17px;
}
QCheckBox::indicator:enabled:unchecked {
        image: url(:/pic/Unchecked.png);
}
QCheckBox::indicator:enabled:unchecked:hover {
        image: url(:/pic/Unchecked.png);
}
QCheckBox::indicator:enabled:unchecked:pressed {
        image: url(:/pic/Unchecked.png);
}
QCheckBox::indicator:enabled:checked {
        image: url(:/pic/Checked.png);
}
QCheckBox::indicator:enabled:checked:hover {
        image: url(:/pic/Checked.png);
}
QCheckBox::indicator:enabled:checked:pressed {
        image: url(:/pic/Checked.png);
}
QCheckBox::indicator:enabled:indeterminate {
        image: url(:/pic/PartiallyChecked.png);
}
QCheckBox::indicator:enabled:indeterminate:hover {
        image: url(:/pic/PartiallyChecked.png);
}
QCheckBox::indicator:enabled:indeterminate:pressed {
        image: url(:/pic/PartiallyChecked.png);
}

开关效果

构建复选框QCheckBox,然后将它们添加至按钮组QButtonGroup中。


开关效果
#include "widget.h"
#include "ui_widget.h"
#include <QHBoxLayout>
#include <QCheckBox>
#include <QDebug>
#include <QFile>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);


    QHBoxLayout *pLayout = new QHBoxLayout();
    m_pButtonGroup = new QButtonGroup(this);

    // 设置不互斥
    m_pButtonGroup->setExclusive(false);

    for (int i = 0; i < 3; ++i)
    {
        QCheckBox *pCheckBox = new QCheckBox(this);

        // 设置文本
        pCheckBox->setText(QString::fromLocal8Bit("切换%1").arg(i + 1));

        pLayout->addWidget(pCheckBox);
        m_pButtonGroup->addButton(pCheckBox);

        QFile qss(":/rc.qss");
        qss.open(QIODevice::ReadOnly);
        pCheckBox->setStyleSheet(qss.readAll());
        qss.close();
    }
    pLayout->setSpacing(10);
    pLayout->setContentsMargins(10, 10, 10, 10);

    setLayout(pLayout);

    // 连接信号槽
    connect(m_pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onButtonClicked(QAbstractButton*)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onButtonClicked(QAbstractButton *button)
{
    // 当前点击的按钮
    qDebug() << QString("Clicked Button : %1").arg(button->text());

    // 遍历按钮,获取选中状态
    QList<QAbstractButton*> list = m_pButtonGroup->buttons();
    foreach (QAbstractButton *pCheckBox, list)
    {
        QString strStatus = pCheckBox->isChecked() ? "Checked" : "Unchecked";
        qDebug() << QString("Button : %1 is %2").arg(pCheckBox->text()).arg(strStatus);
    }
}

通过调用QButtonGroup的setExclusive(false)设置按钮组中的复选框不互斥(可以多选),setExclusive(true)设置按钮组中的复选框互斥(例如性别选择:非男即女)。

样式表

QCheckBox{
    spacing: 2px;
    color: white;
}
QCheckBox::indicator {
    width: 45px;
    height: 30px;
}
QCheckBox::indicator:unchecked {
    image: url(:/pic/switch_close.png);
}
QCheckBox::indicator:unchecked:hover {
    image: url(:/pic/switch_close.png);
}
QCheckBox::indicator:unchecked:pressed {
    image: url(:/pic/switch_close.png);
}
QCheckBox::indicator:checked {
    image: url(:/pic/switch_open.png);
}
QCheckBox::indicator:checked:hover {
    image: url(:/pic/switch_open.png);
}
QCheckBox::indicator:checked:pressed {
    image: url(:/pic/switch_open.png);
}

相关文章

  • Qt 复选对话框

    QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框。QCheckBox(复选框...

  • Qt5 - 5. 对话框 QDialog

    Qt 中使用 QDialog 类实现对话框,通常是设计一个类继承 QDialog。Qt 的对话框分为模态对话框和非...

  • 跟我一起学QT_QT标准对话框_字体选择框

    标准对话框 QT的标准对话框分为以下几种 颜色对话框 文件对话框 字体对话框 输入对话框 消息对话框 进度对话框 ...

  • 跟我一起学QT_QT标准对话框_颜色选择框

    标准对话框 QT的标准对话框分为以下几种 颜色对话框 文件对话框 字体对话框 输入对话框 消息对话框 进度对话框 ...

  • 跟我一起学QT_QT标准对话框_文件对话框

    标准对话框 QT的标准对话框分为以下几种 颜色对话框 文件对话框 字体对话框 输入对话框 消息对话框 进度对话框 ...

  • Qt主界面获取对话框数据

    在编写Qt程序的时候,我们常常需要通过对话框来获取用户的输入数据,比如通过文件对话框获取文件的路径,通过颜色对话框...

  • 自定义 Qt Creator 向导

    我们在使用 Qt Creator 创建项目时,弹出的 New File or Project 对话框,便是创建项目...

  • Qt:模式对话框

    QDialog类参考 对话框:用于提示用户输入 对话框分两种: (1)模式对话框Modal背景界面卡住,用户必须完...

  • Qt:文件对话框

    QFileDialog类参考 选择打开文件 保存文件 文中ToUnicode()及FromUnicode均为封装好...

  • 软件层系统功能模块——新建项目

    首先创建一个空白工程,在Qt Creator中选择“新建文件或项目”菜单项,打开的对话框如图1.1所示。 Qt5....

网友评论

      本文标题:Qt 复选对话框

      本文链接:https://www.haomeiwen.com/subject/hejmfctx.html