
设置表的model的行数为rows。
如果它少于rowCount(),多余的行数会被舍弃。
环境:银河麒麟下的Qt 5.6.3
示例:QTableWidget,假定有450行8列。
#include <QApplication>
#include <QTableWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget w;
w.resize(1250,700);
w.setRowCount(450);
w.setColumnCount(8);
for(int i = 0;i < 450;i++)
for(int j = 0;j < 8;j++)
{
QTableWidgetItem * item = new QTableWidgetItem(QString("%1行%2列").arg(i).arg(j));
w.setItem(i,j,item);
}
w.show();
return a.exec();
}
这时候进行拖拽操作是很流畅的。
然后执行刷新操作,重新设置单元格的内容
w.clearContents();
w.setRowCount(450);
//重新添加所有的单元格
for(int i = 0;i < 450;i++)
for(int j = 0;j < 8;j++)
{
QTableWidgetItem * item = new QTableWidgetItem(QString("%1行%2列").arg(i).arg(j));
w.setItem(i,j,item);
}
这时候页面卡顿挺严重的
耗时比较厉害
如果这样写,就不会卡顿了:
w.clearContents();
w.setRowCount(0);
w.setRowCount(450);
//重新添加所有的单元格
需要先清空一下tableWidget对应的model();
所以需要先设置setRowCount(0),清空一下
------
刚才我又测试了以下:
发现在Windows下的Qt Creator5.9中,类似的操作不会导致卡顿。这让我又有些困惑了起来。
#include <QApplication>
#include <QTableWidget>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget w;
w.resize(1250,700);
w.setRowCount(450);
w.setColumnCount(8);
for(int i = 0;i < 450;i++)
for(int j = 0;j < 8;j++)
{
QTableWidgetItem * item = new QTableWidgetItem(QString("%1行%2列").arg(i).arg(j));
w.setItem(i,j,item);
}
w.show();
QPushButton button;
button.setText("刷新单元格");
button.show();
QObject::connect(&button,&QPushButton::clicked,[&](){
w.clearContents();
w.setRowCount(450);
for(int i = 0;i < 450;i++)
for(int j = 0;j < 8;j++)
{
QTableWidgetItem * item = new QTableWidgetItem(QString("%1行%2列").arg(i).arg(j));
w.setItem(i,j,item);
}
});
return a.exec();
}
1万+

被折叠的 条评论
为什么被折叠?



