QT custom checkbox , neat and cool

Let’s check the final result first

checkbox

code snippets:
/*************** head file **********************/

class CheckBox : public QWidget{
    Q_OBJECT
public:
    CheckBox(QWidget * parent = nullptr);
    void mousePressEvent(QMouseEvent *event) ;
    void paintEvent(QPaintEvent *event);
    void enterEvent(QEvent *event) ;
    void leaveEvent(QEvent *event) ;
public:
    bool isChecked();
signals:
    void sigChecked(bool check);
private:
    bool checked;
    bool hovering;
};

/********************** cpp file ***********************/

CheckBox::CheckBox(QWidget * parent):QWidget(parent){
    this->setFixedSize(32,32);
    setAutoFillBackground(true);
    setStyleSheet("border:none");
    setMouseTracking(true);
    checked = false;
    hovering = false;
}
void CheckBox::enterEvent(QEvent *event) {
    hovering = true;
    update();
}
void CheckBox::leaveEvent(QEvent *event) {
    hovering = false;
    update();
}
void CheckBox::mousePressEvent(QMouseEvent *event) {
    checked = !checked;
    this->update();
    emit sigChecked(checked);
}
void CheckBox::paintEvent(QPaintEvent *event) {
    static const QString colorNorm = skinList[SkinPink].normal;
    static const QString colorHov = skinList[SkinPink].hover;
    static const QString colorPress = skinList[SkinPink].pressed;
    auto rect = this->rect();
    rect.adjust(4,4,-4,-4);

    QPainter p(this);
    p.setRenderHints(QPainter::Antialiasing);
    QPen pen;
    QBrush brush;
    if(hovering) brush = QBrush(QColor(colorHov));
    else brush = QBrush(QColor(colorNorm));
    pen.setWidth(2);
    pen.setColor(QColor(colorPress));
    p.setPen(pen);
    brush.setTransform(QTransform(1.03,0,1,0,1.03,1));
    p.setBrush(brush);
    p.drawRoundedRect(rect,6,6);
    if(checked){
        int x = width();
        int y = height();
        QPainterPath pp;
        pp.moveTo(x/4,y/2);
        pp.lineTo(0.375*x,0.75*y);
        pp.lineTo(0.75*x,0.25*y);
        p.drawPath(pp);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 Qt 中触发 checkBox,可以使用 `setChecked()` 函数。例如,如果你有一个名为 `myCheckBox` 的 checkBox 控件,你可以使用以下代码来选中它: ```cpp myCheckBox->setChecked(true); ``` 如果你想取消选中它,可以使用以下代码: ```cpp myCheckBox->setChecked(false); ``` 你也可以在代码中检查 checkBox 的状态,例如: ```cpp if (myCheckBox->isChecked()) { // do something } ``` ### 回答2: 在QT中,要触发checkBox,可以通过以下几个步骤完成: 首先,在设计界面时,将checkBox控件拖拽到窗口中,并设置其相应的属性,如文本、大小、位置等。 然后,在代码中,我们可以通过以下几种方式触发checkBox的选中状态: 1. 使用setChecked(bool)函数:可以使用setChecked(true)来选中checkBox,使用setChecked(false)来取消选中。可以在需要的地方,如按钮点击事件、其他控件状态变化等,调用该函数来改变checkBox的选中状态。 2. 使用toggle()函数:toggle()函数会在原来的基础上切换checkBox的选中状态,即如果checkBox选中,则调用toggle()函数后会取消选中,如果checkBox未选中,则调用toggle()函数后会选中。 3. 使用click()函数:click()函数会模拟鼠标点击事件,即调用该函数后会触发checkBox的选中状态变化。可以在需要的地方,如按钮点击事件、其他控件状态变化等,调用click()函数来触发checkBox的选中状态改变。 除了以上的方法,还可以通过信号和槽机制来触发checkBox的选中状态。我们可以连接checkBox的clicked()信号和相应的槽函数,在槽函数中对checkBox的选中状态进行处理,从而实现对checkBox的触发。 总之,通过以上几种方式,我们可以在QT中触发checkBox的选中状态,根据需求选择合适的方式来实现。 ### 回答3: QT 是一种常用的跨平台应用程序开发框架,用于开发图形用户界面(GUI)程序。在QT中,checkBox(复选框)是一种常见的用户界面控件,它通常用于表示二进制选项的状态,用户可以通过点击勾选或取消勾选。 在QT中,要实现触发(触发复选框的状态改变)checkBox,我们可以使用信号与槽机制。 首先,我们需要在QT项目中创建一个checkBox。可以通过代码或者图形化界面设计工具创建一个checkBox控件,并设置其对象名称,例如"checkBox"。 接下来,在相关的代码中,我们需要连接checkBox的信号与槽。通过使用connect函数,将checkBox的信号(例如clicked()信号)与槽函数进行连接。槽函数可以是我们自定义的函数,用于处理checkBox状态改变后的逻辑操作。 通过信号与槽的连接,当checkBox的状态改变时,被连接的槽函数就会被自动触发。在槽函数中,我们可以根据checkBox的状态进行相应的处理,例如更新界面、执行特定操作等。 以下是一个简单的代码示例,用于实现点击改变复选框状态的功能: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout layout; window.setLayout(&layout); QCheckBox checkBox("Check me"); layout.addWidget(&checkBox); QObject::connect(&checkBox, &QCheckBox::clicked, [](bool checked) { qDebug() << "CheckBox checked:" << checked; }); window.show(); return app.exec(); } ``` 在上述代码中,我们创建了一个窗口,并将一个checkBox添加到窗口中。然后,我们使用connect函数连接了checkBox的clicked()信号与一个匿名Lambda函数的槽。当checkBox被点击时,槽函数会输出checkBox的状态。 通过上述方式,我们可以在QT中实现通过点击来触发checkBox的状态改变。需要注意的是,代码中的连接方式和槽函数逻辑可以根据具体需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值