當你使用QStandardItemModel(model)與QTableView顯示數據時, 如果數據量比較大, 如幾千上萬條, 每次給model填充數據時, 只是使用model->clear()來清空數據, 然后再填充, 速度會非常的慢. 但如果是使用delete model; model = new QStandardItemModel()顯示的刪除model, 然后再創建一個model, 這樣顯示速度會非常的快, 不知何故.
評論
感謝您的回答,我實現的主要代碼如下:
*.h文件
QstandardItemModel *model = new QstandardItemModel();
*.cpp文件
addModelItem(QAbstractItemModel *ml,const QString &id,...(這里有14個QString))
{
ml->insertRow(0);
ml->setData(ml->index(0,0),id);
...(一共set14個)
}
這是個函數()
{
for(int i = 0;i<1000;i++)
{
addModelItem(model,"1",...(14個字符串));
}
}
我實在不知道問題在哪,插入這1000條記錄就用了20多秒。您如有時間,請指點一下,謝謝。 回復 更多評論
*.h文件
QstandardItemModel *model = new QstandardItemModel();
*.cpp文件
addModelItem(QAbstractItemModel *ml,const QString &id,...(這里有14個QString))
{
ml->insertRow(0);
ml->setData(ml->index(0,0),id);
...(一共set14個)
}
這是個函數()
{
for(int i = 0;i<1000;i++)
{
addModelItem(model,"1",...(14個字符串));
}
}
我實在不知道問題在哪,插入這1000條記錄就用了20多秒。您如有時間,請指點一下,謝謝。 回復 更多評論
看例子中的解釋, 應該就知道問題在哪了.
Qt很多時候表現得有點怪, 必須用怪招才能解決. 在我寫項目的過程中, 遇到過很多, 感覺邏輯上沒有任何問題, 但卻不行, 換一點點方式又可以了, 就像上面文中列出來的一樣.
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QStandardItemModel *model = new QStandardItemModel();
QTableView *table = new QTableView();
// 如果事先給 table設置了 model而不預指定好要存儲的數據的行數,則會非常慢
// table->setModel(model); /// [[1]]
// model->setRowCount(1000); /// [[1]]
model->setColumnCount(14);
for (int i = 0; i < 1000; ++i) {
model->setItem(i, 0, new QStandardItem("1"));
model->setItem(i, 1, new QStandardItem("2"));
model->setItem(i, 2, new QStandardItem("3"));
model->setItem(i, 3, new QStandardItem("4"));
model->setItem(i, 4, new QStandardItem("5"));
model->setItem(i, 5, new QStandardItem("6"));
model->setItem(i, 6, new QStandardItem("7"));
model->setItem(i, 7, new QStandardItem("8"));
model->setItem(i, 8, new QStandardItem("9"));
model->setItem(i, 9, new QStandardItem("10"));
model->setItem(i, 10, new QStandardItem("11"));
model->setItem(i, 11, new QStandardItem("12"));
model->setItem(i, 12, new QStandardItem("13"));
model->setItem(i, 13, new QStandardItem("14"));
}
// 如果你是先把數據加載到model中的,那么事先不指定要存儲的行數。
// 先把數據存儲到model中 ,然后再給table設置model,這樣也會很快 .
table->setModel(model); /// [[2]]
table->show();
return app.exec();
} 回復 更多評論
Qt很多時候表現得有點怪, 必須用怪招才能解決. 在我寫項目的過程中, 遇到過很多, 感覺邏輯上沒有任何問題, 但卻不行, 換一點點方式又可以了, 就像上面文中列出來的一樣.
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QStandardItemModel *model = new QStandardItemModel();
QTableView *table = new QTableView();
// 如果事先給 table設置了 model而不預指定好要存儲的數據的行數,則會非常慢
// table->setModel(model); /// [[1]]
// model->setRowCount(1000); /// [[1]]
model->setColumnCount(14);
for (int i = 0; i < 1000; ++i) {
model->setItem(i, 0, new QStandardItem("1"));
model->setItem(i, 1, new QStandardItem("2"));
model->setItem(i, 2, new QStandardItem("3"));
model->setItem(i, 3, new QStandardItem("4"));
model->setItem(i, 4, new QStandardItem("5"));
model->setItem(i, 5, new QStandardItem("6"));
model->setItem(i, 6, new QStandardItem("7"));
model->setItem(i, 7, new QStandardItem("8"));
model->setItem(i, 8, new QStandardItem("9"));
model->setItem(i, 9, new QStandardItem("10"));
model->setItem(i, 10, new QStandardItem("11"));
model->setItem(i, 11, new QStandardItem("12"));
model->setItem(i, 12, new QStandardItem("13"));
model->setItem(i, 13, new QStandardItem("14"));
}
// 如果你是先把數據加載到model中的,那么事先不指定要存儲的行數。
// 先把數據存儲到model中 ,然后再給table設置model,這樣也會很快 .
table->setModel(model); /// [[2]]
table->show();
return app.exec();
} 回復 更多評論
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|