回顾QT自带的控件,表格、窗口等

本来上午还在想着把数据量用图来做,结果计划有变,现在回归到用表格做,就只用qt只带的控件做就够了,正式做之前,我先来回顾下大体要用到的控件。

QGroupBox

在这里插入图片描述
首先QGroupBox的父类是QWidget,然后我需要用到的也就是这个框框左上角一个标题,然后我在里面放上相关的数据量,QGroupBox有一个checkable属性,设置为true,就可以被选中或取消选中。通过槽函数

connect(ui->groupBox, &QGroupBox::toggled, receiver, SLOT(slot()) );

就可以让我实现一些选定功能

QTabWidget

在这里插入图片描述

同样是QWidget的子类,相当于是提供了可以切换的多个QWidget。

QTableView 和 QTableWidget

QTableView 和 QTableWidget我放在一起记录,因为当我第一次看到它们的时候就觉得是同一个东西

然后我就搜了下:

#QTableView是一个基于模型/视图架构的类,用于显示和编辑表格数据。它需要一个QAbstractItemModel模型来提供数据,并且可以自定义视图来显示数据。QTableView可以显示大量数据,因为它只在需要时才会加载数据,而不是一次性加载所有数据。

QTableWidget是一个基于QTableView的类,它是一个自包含的表格控件,可以直接添加、删除和编辑单元格。它不需要模型,因为它自己管理数据。QTableWidget适用于小型数据集,因为它会一次性加载所有数据。

因此,QTableView和QTableWidget的主要区别在于它们的数据模型和数据管理方式。QTableView需要一个模型来提供数据,而QTableWidget自己管理数据。QTableView适用于大型数据集,而QTableWidget适用于小型数据集。

按我目前的需求,我应该先用QTableWidget来做,那么我就接着考虑几个问题

1.我的数据怎么放在QTableWidget上面

首先我在ui中添加一个QTableWidget,然后直接在构造函数下如下代码

ui->tableWidget->setRowCount(3);
    ui->tableWidget->setColumnCount(2);

    // 设置表头
    ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "姓名" << "年龄");

    // 设置数据
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0, 1, new QTableWidgetItem("20"));
    ui->tableWidget->setItem(1, 0, new QTableWidgetItem("李四"));
    ui->tableWidget->setItem(1, 1, new QTableWidgetItem("25"));
    ui->tableWidget->setItem(2, 0, new QTableWidgetItem("王五"));
    ui->tableWidget->setItem(2, 1, new QTableWidgetItem("30"));

然后我得到了这样的效果
在这里插入图片描述
我可以通过鼠标选择某一行或者某一格

2.怎么修改某一个格或者某一行的背景颜色

在构造函数中继续添加

    QTableWidgetItem* item = new QTableWidgetItem("Hello");
    item->setBackground(Qt::red);
    ui->tableWidget->setItem(3, 0, item);
    QTableWidgetItem* item1 = new QTableWidgetItem("Hello1");
    item1->setBackground(QColor(0,255,0));
    ui->tableWidget->setItem(3, 1, item1);

在这里插入图片描述

3.我想再加一列,让我可以去随时修改表格的背景颜色

双击修改背景颜色为红色
1.第一步我先把表格值可修改的功能关掉

ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);

显然,这一步是在dialog的构造函数里面写的

2.然后就是双击事件的响应,这个的去重写QTableWidget的mouseDoubleClickEvent函数,所以我选择先新建一个继承QTableWidget的类,然后在类里面重写:

class MyTableWidget : public QTableWidget
{
    Q_OBJECT
public:
    MyTableWidget(QWidget *parent = nullptr);
    void mouseDoubleClickEvent(QMouseEvent *event) override{
        QTableWidgetItem *item = currentItem();
        if (item) {
            item->setBackground(Qt::red);
        }
        QTableWidget::mouseDoubleClickEvent(event);
    }
};

然后将ui中的QTableWidget提升为我自己的类,这样就可以了

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值