QTableView 似乎对 dataChanged 信号没有反应
Posted
技术标签:
【中文标题】QTableView 似乎对 dataChanged 信号没有反应【英文标题】:QTableView doesn't seem to react on dataChanged signal 【发布时间】:2012-01-08 14:40:54 【问题描述】:下面显示的是我的自定义表格模型。我正在尝试将该 tablemodel 与 QTableView 一起使用。如果调用表模型的方法 append 我希望表视图更新其内容。但它没有,我不知道为什么。但是,如果我将相同的表模型与 QListView 一起使用,则一切正常,即当调用表模型的追加时,列表视图会更新其内容。对于 QTableView,我需要做些什么特别的事情吗?
class MyModel : public QAbstractTableModel
public:
MyModel(QObject* parent=NULL) : QAbstractTableModel(parent)
int rowCount(const QModelIndex &parent = QModelIndex()) const
return mData.size();
int columnCount(const QModelIndex &parent = QModelIndex()) const
return 2;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
if (!index.isValid())
return QVariant();
if (role == Qt::DisplayRole)
if (index.column()==0)
return QVariant(QString::fromStdString(getFirst(index.row())));
if (index.column()==1)
return QVariant(QString::fromStdString(getSecond(index.row())));
return QVariant();
void append(std::string const& first, std::string const& second)
mData.push_back(std::make_pair(first, second));
emit dataChanged(index(mData.size()-1, 0), index(mData.size()-1, 1));
std::string const& getFirst(int i) const
return mData[i].first;
std::string const& getSecond(int i) const
return mData[i].second;
protected:
std::vector<std::pair<std::string, std::string> > mData;
;
【问题讨论】:
【参考方案1】:当您插入新行而不是更改现有数据时,您应该改用 beginInsertRows 和 endInsertRows:
void append(std::string const& first, std::string const& second)
int row = mData.size();
beginInsertRows( QModelIndex(), row, row );
mData.push_back(std::make_pair(first, second));
endInsertRows();
看看有没有帮助。
【讨论】:
这对我有帮助。您是否有指向您找到此答案的文档的链接? beginInsertRows/endInsert 行的用法可以在QAbstractItemModel class 的 Qt 文档中找到。以上是关于QTableView 似乎对 dataChanged 信号没有反应的主要内容,如果未能解决你的问题,请参考以下文章
table.dataChanged(index, index).connect(someFunction) 失败
发出 dataChanged(createIndex(1,1),createIndex(1,1)) 导致许多 ::data 调用