Qt中继承QCheckBox的类结合QTableWidget实现多选并且每个多选的id都不一样

1.相关描述

继承QCheckBox的类MyCheckBox,利用QTableWidget的setCellWidget方式添加MyCheckBox类的对象

2.相关页面

3.相关代码

mycheckbox.h

cpp 复制代码
#ifndef MYCHECKBOX_H
#define MYCHECKBOX_H

#include <QCheckBox>
#include <QObject>

class MyCheckBox : public QCheckBox
{
public:
    MyCheckBox(QWidget *parent = nullptr);

    void SetID(int id);
    int GetID();
private:
    int mId;
};

#endif // MYCHECKBOX_H

mycheckbox.cpp

cpp 复制代码
#include "mycheckbox.h"
#include <QDebug>
MyCheckBox::MyCheckBox(QWidget *parent):QCheckBox(parent) {}

void MyCheckBox::SetID(int id)
{
    this->mId = id;
}

int MyCheckBox::GetID()
{
    return mId;
}

mainwindow.h

cpp 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void recvCheckBox(bool checked);
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

cpp 复制代码
#include "checkboxdelegate.h"
#include "mainwindow.h"
#include "mycheckbox.h"
#include "ui_mainwindow.h"

#include <QCheckBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->tableWidget->setColumnCount(3);
    ui->tableWidget->setRowCount(3);
    for(int i = 0; i < 3; i++){
        MyCheckBox *checkBox = new MyCheckBox();
        checkBox->setText(QString::number(i+1));
        QWidget *widget = new QWidget();
        QHBoxLayout *layout = new QHBoxLayout(widget);
        layout->addWidget(checkBox);
        layout->setAlignment(Qt::AlignCenter);
        layout->setContentsMargins(0, 0, 0, 0);
        widget->setLayout(layout);
        ui->tableWidget->setCellWidget(i, 0, widget);
        checkBox->SetID(i);
        connect(checkBox, &MyCheckBox::clicked, this, &MainWindow::recvCheckBox);
    }
    // ui->tableWidget->insertRow(3);
    // MyCheckBox *checkBox = new MyCheckBox();
    // checkBox->setText(QString::number(3));
    // QWidget *widget = new QWidget();
    // QHBoxLayout *layout = new QHBoxLayout(widget);
    // layout->addWidget(checkBox);
    // layout->setAlignment(Qt::AlignCenter);
    // layout->setContentsMargins(0, 0, 0, 0);
    // widget->setLayout(layout);
    // ui->tableWidget->setCellWidget(3, 0, widget);
    // checkBox->SetID(3);
    // connect(checkBox, &MyCheckBox::clicked, this, &MainWindow::recvCheckBox);

}

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

void MainWindow::recvCheckBox(bool checked)
{
    MyCheckBox* checkBox = static_cast<MyCheckBox*>(sender());
    qDebug() << "checked = " << checked << ";id = " << checkBox->GetID();
}
相关推荐
Dxy12393102167 分钟前
Python使用XPath定位元素:动态计算与函数调用
开发语言·python
小小码农Come on8 分钟前
QT实现线程4种方法
qt
Evand J20 分钟前
【MATLAB代码介绍】三种CT模型的IMM(交互式多模型)对目标高精度定位
开发语言·matlab·ct·imm·交互式多模型·多模型·转弯
AC赳赳老秦23 分钟前
OpenClaw权限管理实操:团队共享Agent,设置操作权限,保障数据安全
服务器·开发语言·前端·javascript·excel·deepseek·openclaw
geovindu35 分钟前
go: Proxy Pattern
开发语言·后端·设计模式·golang·代理模式
langsiming40 分钟前
【无标题】
java·开发语言·数据库
꧁细听勿语情꧂41 分钟前
合并两个有序表、判断链表的回文结构、相交链表、环的链表一和二
c语言·开发语言·数据结构·算法
Rust语言中文社区43 分钟前
【Rust日报】2026-04-24 Vizia 0.4 发布——纯 Rust 声明式响应式 GUI 框架
开发语言·后端·rust
普通网友1 小时前
JavaScript:ESLint+Prettier 规范代码格式
开发语言·javascript·ecmascript
t***5441 小时前
如何在 Dev-C++ 中切换编译器
java·开发语言·c++