gpt4 book ai didi

qt - 动态添加数据到 QTableView

转载 作者:行者123 更新时间:2023-12-04 13:50:57 28 4
gpt4 key购买 nike

我正在写一个简单的 TableView根据

http://harmattan-dev.nokia.com/docs/library/html/qt4/itemviews-addressbook.html

class MyModel : public QAbstractTableModel {
Q_OBJECT
public:
QList<QPair<string, int> > data_;
....

如何动态向模型添加行? data_.insert(..)不会改变 View ,目前我编写了一个函数来追加新行:
void my_append_data(const string& first, int second) {
int row = rowCount(QModelIndex());
insertRow(row); // insert a empty row
// fill the row
setData(createIndex(row, 0), QVariant::fromValue<string>(first), Qt::EditRole);
setData(createIndex(row, 1), QVariant::fromValue<int>(second), Qt::EditRole);
}
// usage
model.my_append_data("11111", 111);
model.my_append_data("22222", 222);

这似乎效率低下,导致 setData追加一行时被调用两次,因为有两列,将来可能会有更多列。

有更好的方法来追加行吗?

谢谢。

最佳答案

我不确定你为什么认为它效率低下。但是你可以让它更简单。

我可能会像这样编写您的函数,这将使它在 future 更能证明对列数和类型的更改:

void my_append_data(const QVariantList &data) {
insertRow(rowCount(QModelIndex()));

foreach(const QVariant &item, data) {
setData(createIndex(row, 0), item, Qt::EditRole);
}
}

用法:
model.my_append_data(QVariantList() << "11111" << 111);

基本(和大多数 Qt 类型)可以隐式转换为 QVariant s,所以无需调用 QVariant::fromValue()
此外,如果您使用 Qt,您通常会使用 QString s,而不是 std::string s。

关于qt - 动态添加数据到 QTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993898/

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