问题描述
QCompleter
在大型数据集(大型模型)上的工作速度稍慢:当我开始在QCombobox
中输入字符时,它会花几秒钟的时间来显示带有变体的自动完成弹出窗口,而输入第二个字符QCompleter
却没有按键也要反应几秒钟.下一个字符工作正常.型号大小约为10万条记录.是否可以提高QCompleter
性能或在第二个或第三个输入符号后显示弹出窗口?有一些很好的例子吗?
QCompleter
works slightly slow on large data sets (large models): when I start to input characters in QCombobox
it passes few seconds to show auto-complete popup with variants, when input 2nd char QCompleter
does not react on key press for few seconds as well. Next characters works fine. Model size is about 100K records. Is it possible to improve QCompleter
performance or show popup after 2nd or 3rd input symbol? Are there some good examples?
推荐答案
解决方案类似于以下内容: https://stackoverflow.com /a/33404207/630169 ,因为QCompleter
在其popup()
中也使用了QListView
.因此,用于加快QCombobox的 full 解决方案是:
Solution appears similar to this: https://stackoverflow.com/a/33404207/630169 as QCompleter
also uses QListView
in its popup()
. So full solution to speed-up QCombobox is:
void ComboboxTools::tweak(QComboBox *combo)
{
// For performance reasons use this policy on large models
// or AdjustToMinimumContentsLengthWithIcon
combo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
// Improve combobox view performance
tweak((QListView *)combo->view());
// Improve combobox completer performance
tweak(combo->completer());
}
调整下拉菜单/弹出窗口(查看):
void ComboboxTools::tweak(QListView *view)
{
// Improving Performance: It is possible to give the view hints
// about the data it is handling in order to improve its performance
// when displaying large numbers of items. One approach that can be taken
// for views that are intended to display items with equal sizes
// is to set the uniformItemSizes property to true.
view->setUniformItemSizes(true);
// This property holds the layout mode for the items. When the mode is Batched,
// the items are laid out in batches of batchSize items, while processing events.
// This makes it possible to instantly view and interact with the visible items
// while the rest are being laid out.
view->setLayoutMode(QListView::Batched);
// batchSize : int
// This property holds the number of items laid out in each batch
// if layoutMode is set to Batched. The default value is 100.
// view->setBatchSize(100);
}
调整完成器:
void ComboboxTools::tweak(QCompleter *completer)
{
completer->setCaseSensitivity(Qt::CaseInsensitive);
// If the model's data for the completionColumn() and completionRole() is sorted
// in ascending order, you can set ModelSorting property
// to CaseSensitivelySortedModel or CaseInsensitivelySortedModel.
// On large models, this can lead to significant performance improvements
// because the completer object can then use a binary search algorithm
// instead of linear search algorithm.
completer->setModelSorting(QCompleter::CaseSensitivelySortedModel);
// Improve completer popup (view) performance
tweak((QListView *)completer->popup());
}
这篇关于大型模型的QCompleter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!