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();
}
相关推荐
太阳的后裔22 分钟前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo23 分钟前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
ajassi20004 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一5 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
lingchen19067 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
gb42152877 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
一朵梨花压海棠go7 小时前
html+js实现表格本地筛选
开发语言·javascript·html·ecmascript
蒋星熠8 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
翻滚丷大头鱼8 小时前
Java 集合Collection—List
java·开发语言