gpt4 book ai didi

c++ - 在 Qt 中从 QAbstractTableModel 将数据初始化为自定义模型?

转载 作者:行者123 更新时间:2023-11-27 23:12:26 34 4
gpt4 key购买 nike

我是 Qt 模型/ View 框架的初学者。我在使用带有 QTableView 的 QAbstractTableModel 子类 (MyModel) 时遇到问题。创建 MyModel 对象后,我想将其设置为具有 2 行和 2 列。我有一个初始化函数,它设置所有类变量,然后发出 dataChanged() 信号,但 View 仍然没有显示任何内容。

class MyModel : QAbstractTableModel
{
public:
MyModel();
Initialise(double **a, int r, int c);

private:
int row;
int column;
double **array;
}

MyModel::Initialise(double **a, int r, int c)
{
array = a;
row = r;
column = c;
emit dataChanged(index(0, 0), index(r - 1, c - 1));
}

我已经重新实现了只读访问所需的所有功能。但我仍然得到一个空白窗口。出于说明目的,在记事本中创建了上述代码,因此请忽略语法错误。我在 Qt SDK 中找不到任何用于从 QAbstractTableModel 创建自定义模型的示例。所以请告诉我将数据初始化为模型的正确方法是什么。

编辑:

QVariant TableModel::data(const QModelIndex &index, int role) const
{
if(!index.isValid())
return QVariant();//currently it is returning from here, why???

switch(role)
{
case Qt::DisplayRole:
{
if(index.column()==0)
return QString::number(array[index.row()][index.column()]);
break;
}
}
}

最佳答案

dataChanged 信号强制 View 更新现有项目。它没有告诉它行数或列数已更改。您应该改用 layoutAboutToBeChangedlayoutChanged 信号。您可以在没有任何参数的情况下使用它们。

确保您正确实现了 rowCountcolumnCount 虚函数。

我不知道为什么 index.isValid() 在你的函数中是错误的。检查索引的 model()row()column() 属性,找出它无效的确切原因。通常, View 可以使用任意参数调用 data 函数。由于您的 View 认为您的模型是空的,因此所有索引很可能都是无效的。当您在 View 中看到任何行和列时,您将开始接收有效索引。

此外,如果只执行一次初始化,最好在将模型分配给 View 之前执行。

并且不要使用double**。请改用自动内存管理(例如 QVector)。毕竟是 C++。

关于c++ - 在 Qt 中从 QAbstractTableModel 将数据初始化为自定义模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19330269/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com