Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Qt-如何在QTableWidget中高效地添加大量单元格?_Performance_Gridview_Qt5_Cell - Fatal编程技术网

Performance Qt-如何在QTableWidget中高效地添加大量单元格?

Performance Qt-如何在QTableWidget中高效地添加大量单元格?,performance,gridview,qt5,cell,Performance,Gridview,Qt5,Cell,我对Qt完全是新手,我需要在QTableWidget中添加大量的单元格。每个单元格包含一个自定义小部件,由一个图像和一个文本组成 我使用以下代码添加单元格: //--------------------------------------------------------------------------- GridView::GridView(QWidget*父项): QMainWindow(父窗口) { m_UI.setupUi(本); m_CellCount=1000000; //如果

我对Qt完全是新手,我需要在QTableWidget中添加大量的单元格。每个单元格包含一个自定义小部件,由一个图像和一个文本组成

我使用以下代码添加单元格:

//---------------------------------------------------------------------------
GridView::GridView(QWidget*父项):
QMainWindow(父窗口)
{
m_UI.setupUi(本);
m_CellCount=1000000;
//如果需要,请添加新行
m_UI.twGridView->setRowCount((m_CellCount/7)+1);
对于(int i=0;icolumnWidth(column)-10);
pImage->setStyleSheet(“图像:url(resources/images/Device.png)center;”;
打破
案例1:
text=metrics.elidedText(“iPod Shuffle Robbie”,Qt::ElideLight,m_UI.twGridView->columnWidth(column)-10);
pImage->setStyleSheet(“image:url(resources/images/Shuffle.png)center;”;
打破
案例2:
text=metrics.elidedText(“iPad Robbie”,Qt::ElideLight,m_UI.twGridView->columnWidth(column)-10);
pImage->setStyleSheet(“image:url(resources/images/iPad.png)center;”;
打破
}
std::unique_ptr pLabel(新QLabel(text));
pLabel->设置固定高度(20);
pLabel->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
pLabel->setFont(字体);
pLabel->setStyleSheet(“颜色:rgb(243243243243);”;
std::unique_ptr pWidget(新的QWidget());
std::unique_ptr播放(新的QVBoxLayout(pWidget.get());
播放->添加间距(10);
pLayout->addWidget(pImage.get());
播放->添加间距(10);
pLayout->addWidget(pLabel.get());
pWidget->setLayout(pLayout.get());
pWidget->setStyleSheet(“背景:无;”);
pImage.release();
pLabel.release();
pLayout.release();
m_UI.twGridView->setCellWidget(行、列、pWidget.get());
pWidget.release();
}
//---------------------------------------------------------------------------
我的问题是,上面的代码对于少量单元格是可以接受的,但是添加大量代码会以一种不可接受的方式破坏性能(即直到几十分钟后打开视图)。我说的是“巨大的数量”,例如大约1'000'000个细胞


在我的网格视图中添加这样一个单元格的正确方法是什么,而不会严重破坏性能,而尊重它们的内容?

< P>如果你需要一个好的性能,你应该考虑用你自己的模型使用A。
一个好的开始是。

您可以尝试的快速修复方法是在添加项目时禁用
QTableWidget
上的GUI更新,然后重新启用它们。使用
setUpdatesEnabled
方法执行此操作


最好的解决方案是切换到使用
QTableView
。您可以首先尝试使用
QStandardItemModel
,如果速度不够快或占用太多内存,则创建自定义模型。但是我必须提醒你,既然你说你是一个Qt新手,Qt模型和模型视图是框架中最复杂的部分,那么请准备好做一些研究(确实要先用
QStandardItemModel
作为基线来创建工作代码)。

谢谢你的回答。事实上,实现我的目标的最好方法似乎是创建我自己的网格视图模型。谢谢你的回答。事实上,我注意到最消耗的代码是那些创建单元格内容的代码。不幸的是,没有办法弥补这一点,唯一的解决办法是创建我自己的模型。为此,您提供的链接将帮助我,因此我接受您的答案作为解决方案。