QTableView动态插入-亲测可用

由于最近在做QT网络通信的项目,需要使用QtableView来动态的显示接收的报文信息。以下的代码示例可以动态的在QtableView中插入行。

void threadRecv()
{
   QStandardItemModel *tabModel = new QStandardItemModel();
   // 设置数据模型,即绑定tableView与model
   ui->tableView->setModel(tabModel);
   // 获取本地时间并以2001-01-01 00:00:00.000的形式表示,时间精确到毫秒
    QString time = QDateTime::currentDataTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
    // 获取报文名称
    const QString &msg = getMsgName();
    // 获取当前表格的行数
    int rowCount = ui->tableView->model()->rowCount();
    // 在当前表格的最后一行新插入一行
    ui->tableView->model()->insertRow(rowCount);
    for(int i = 0; i < ui->tableView->model()->columnCount; i++)
    {  
        // 设置各单元格的值
        tabModel->setItem(rowCount,i,new QStandardItem(time));
        ...
    }
}

由于本人也是刚入门不久的小菜鸟一枚,如有问题,欢迎各位大佬评论区批评指正!!!

Qt中,QTableView是一个用于显示表格数据的控件,而QWidget是一个基本的窗口部件,可以包含任意数量的其他控件。如果你想在QTableView中直接插入一个QWidget作为单独的单元格内容,这通常不是直接操作,因为QTableView默认展示的是模型数据,而不是底层的QWidget。 然而,你可以通过一些间接的方式来实现这个需求。一种方法是创建一个自定义的model,比如使用QStandardItemModel,然后设置item的Widget属性,将QWidget包装在一个QStyledItemDelegate中。当QTableView绘制单元格时,它会调用delegate的paint函数,这时你可以手动绘制包括QWidget在内的复杂内容。 另一个选择是使用QTableWidget,它是更底层的表格控件,可以直接将QWidget添加到每个单元格。但是需要注意的是,这种方式可能需要你自己处理布局和事件传递等问题。 以下是简单的步骤概述: 1. 创建自定义槽函数处理插入 QWidget 到单元格的操作。 2. 实现 QAbstractItemModel 或者使用如 QStandardItemModel。 3. 设置.delegate 为自定义的 QStyledItemDelegate。 4. 在 widget 被添加时,更新 model 的相应项并通知视图更新。 ```cpp class CustomDelegate : public QStyledItemDelegate { public: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) override { return new QWidget(parent); } void setEditorData(QWidget *editor, const QModelIndex &index) override { // 将 QWidget 的内容绑定到 model 中的数据 } void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) override { // 自定义编辑器位置和大小 } }; // 在主窗口中... QTableView *tableView = new QTableView(parent); QStandardItemModel *model = new QStandardItemModel(parent); // 创建 QWidget 并将其添加到模型 QWidget *customWidget = new QWidget(); // ...设置 customWidget 内容 QStyledItemDelegate *delegate = new CustomDelegate(tableView); tableView->setItemDelegate(delegate); model->setItem(index.row(), index.column(), new QStandardItem(customWidget)); tableView->setModel(model); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值