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();
}
相关推荐
YGGP1 分钟前
吃透 Golang 基础:数据结构之 Map
开发语言·数据结构·golang
~plus~3 分钟前
Harmony核心:动态方法修补与.NET游戏Mod开发
开发语言·jvm·经验分享·后端·程序人生·c#
步、步、为营9 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
~plus~12 分钟前
WPF八大法则:告别模态窗口卡顿
开发语言·经验分享·后端·程序人生·c#
march of Time23 分钟前
go工具库:hertz api框架 hertz client的使用
开发语言·golang·iphone
24K纯学渣44 分钟前
Python编码格式化之PEP8编码规范
开发语言·ide·python·pycharm
怒视天下1 小时前
零基础玩转Python生物信息学:数据分析与算法实现
开发语言·python
GISer_Jing1 小时前
Three.js中AR实现详解并详细介绍基于图像标记模式AR生成的详细步骤
开发语言·javascript·ar
委婉待续1 小时前
Qt的学习(一)
开发语言·qt·学习
笨笨马甲1 小时前
Qt Quick Layout功能及架构
开发语言·qt