QT中tabelview的清空方式

14 篇文章 0 订阅

目的:最近使用tableview发现使用清空会把原来所有做的样式全部清空掉,不符合我的要求。

所以,特意研究了一下。

1、创建tableview的初始化,以及填充数据项

代码:

头文件:

#ifndef TEXTMODELVIEW_H
#define TEXTMODELVIEW_H

#include <QWidget>
#include <QStandardItemModel>
#include <QJsonArray>

namespace Ui {
class textmodelview;
}

class textmodelview : public QWidget
{
    Q_OBJECT

public:
    explicit textmodelview(QWidget *parent = nullptr);
    ~textmodelview();

    void initModel();
public slots:
     void dataShowSlot(const QJsonArray &data);
private slots:
    void on_pushButton_clicked();

private:
    QStandardItemModel *focusAreaModel=nullptr;

private:
    Ui::textmodelview *ui;
};

#endif // TEXTMODELVIEW_H

.cpp

初始化:

void textmodelview::initModel()   //初始化数据模型
{
       focusAreaModel =new QStandardItemModel(this);

    // 设置行和列数
    focusAreaModel->setRowCount(10);
    focusAreaModel->setColumnCount(5);

    QStringList  trackmodelheader;
    trackmodelheader << ""<<"经度" << "纬度" << "高度" << "选择";

    focusAreaModel->setHorizontalHeaderLabels(trackmodelheader);

           for (int row = 0; row < 10; ++row)
          {

        // 创建标签项,设置标签内容为T1、T2、...、T10
                QStandardItem* labelItem = new QStandardItem(QString("T%1").arg(row + 1));
                focusAreaModel->setItem(row, 0, labelItem); // 在第一列设置标签项

               QStandardItem* Item  = new QStandardItem();
               Item->setCheckable(true); // 设置为可勾选
               Item->setCheckState(Qt::Unchecked); // 初始状态为未勾选
               focusAreaModel->setItem(row, 4, Item); // 在第四列设置复选框


           }




    ui->tableView->setModel(focusAreaModel);

           // 隐藏垂直表头
           ui->tableView->verticalHeader()->setVisible(false);

    // 调整第一列宽度以适应内容大小
    ui->tableView->resizeColumnToContents(0);


}

填充数据项:

void textmodelview::on_pushButton_clicked()
{
    QJsonArray jsonArray;

    for (int i = 0; i < 3; ++i)
    {
               // 创建一个包含经度、纬度和高度的对象
     QJsonObject obj;
               obj["经度"] = QRandomGenerator::global()->bounded(static_cast<int>(180.0), static_cast<int>(200.0));
        obj["纬度"] = QRandomGenerator::global()->bounded(10, 90);
        obj["高度"] = QRandomGenerator::global()->bounded(100, 200);

               jsonArray.append(obj);
    }

    dataShowSlot(jsonArray);
}

2、清空方式1

focusAreaModel->clear();
    initModel();

清空后重新初始化,focusAreaModel->clear();会清空所有的样式以及表头

如果不加初始化会变成这样

加了初始化会变得正常

3、清空方式2

利用索引,设置第二列,第三列,第四列的数据为空

 int columnStart = 1; // 第二列的索引
    int columnEnd = 3;   // 第四列的索引

    for (int row = 0; row < focusAreaModel->rowCount(); ++row)
    {
               for (int column = columnStart; column <= columnEnd; ++column)
               {
                   QModelIndex index = focusAreaModel->index(row, column);
                   focusAreaModel->setData(index, QVariant()); // 设置为空值
               }
    }

4、清空方式3

利用索引,使用清空的方法,清空第二列,第三列,第四列的数据

  int columnStart = 1; // 第二列的索引
    int columnEnd = 3;   // 第四列的索引

    for (int row = 0; row < focusAreaModel->rowCount(); ++row)
    {
               for (int column = columnStart; column <= columnEnd; ++column)
               {
                   QModelIndex index = focusAreaModel->index(row, column);
                   focusAreaModel->clearItemData(index);
               }
    }

经过测试,这三种方法产生的效果都是一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值