使用QList 填充QTableView。当视图中的某些内容发生变化时,如何将其恢复到数据中?

问题描述 投票:2回答:2

我有一个数据矩阵,我只是将它存储为QStringLists的QList,它们都包含相同数量的QStrings。通过这种方式,数据看起来几乎就像一个电子表格。

我使用QTableView将这些数据呈现给用户:

void DialogwitQTableView::setData(QList<QStringList> s)
{
    /* Create the data model */
    // 1. give it some headers
    QStandardItemModel model = new QStandardItemModel(s.count(),25,this); //x Rows and 25 Columns
    model->setHorizontalHeaderItem(0, new QStandardItem(QString("Column 1")));
    model->setHorizontalHeaderItem(1, new QStandardItem(QString("Column 2")));
     // ...
    model->setHorizontalHeaderItem(24, new QStandardItem(QString("Column 25")));

    // 2. populate the model with the data

    for(int i = 0; i < s.count() ; i++)
    {
        for(int j = 0; j < s[i].count() ; j++)
            model->setItem(i,j,new QStandardItem(QString(s[i][j])));
    }
    ui->NameOfTheTableView->setModel(model);
}

现在,如果用户想要更改某些数据,他只需双击对话框中的QTableView并编辑他想要的内容。

如何在数据中进行编辑?如何使用新信息调整QStringList?

如果我搜索文档,我主要发现QTableViews链接到数据库,但我不知道这将如何与内存中的简单数据结构一起使用。如果我去QtDesigner并点击TableView的“转到插槽”,我也看不到名为“datachanged”的插槽或任何类似的插槽。

有什么想法吗?我觉得很困难,我可能正在概述一些东西,任何提示都非常受欢迎。

qt tableview
2个回答
1
投票

查看doco,QTableView从QAbstractItemView继承了6个信号

http://doc.qt.digia.com/qt/qabstractitemview.html#signals

该类具有捕获编辑和编辑触发器的各种功能。

一旦您可以捕获数据更改,您可以重新将其重新发送回您的模型,如果您正在使用MVC视图。我相信有很多例子。

希望有所帮助。


0
投票

如果我搜索文档,我主要发现QTableViews链接到数据库,但我不知道这将如何与内存中的简单数据结构一起使用。

QTableView是Qt的Model/View framework的一部分。有很多模型视图的例子。

如何在数据中进行编辑?如何使用新信息调整QStringList?

至少存在以下解决方案:

  1. 您可以通过QStandardItemModel方法从item获取所有数据。
  2. 连接到QStandardItemModel::itemChanged信号。
  3. 您可以通过子类化创建自己的模型(我建议基于qazxsw poi)并实现几种方法(qazxsw poi,qazxsw poi +几种实用方法)。
© www.soinside.com 2019 - 2024. All rights reserved.