qtui:加速大表
我有一个超过2000行的QTableWidget表。当我在每行中添加QToolButton“Remove”时,它会变得有点慢)。为什么表格变慢,按钮ui或信号映射器?我怎样才能加速我的桌子,也许用其他东西来代替按钮,或者用其他方式连接信号qtui:加速大表,qt,qtablewidget,Qt,Qtablewidget,我有一个超过2000行的QTableWidget表。当我在每行中添加QToolButton“Remove”时,它会变得有点慢)。为什么表格变慢,按钮ui或信号映射器?我怎样才能加速我的桌子,也许用其他东西来代替按钮,或者用其他方式连接信号 我的按钮代码: // mapper for remove buttons QSignalMapper* signalMapper = new QSignalMapper(this); connect(signalMapper, SIG
我的按钮代码:
// mapper for remove buttons
QSignalMapper* signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(RemoveString(int)), Qt::UniqueConnection);
而不是每行:
正如瓦汉乔所说,您需要一名项目代表。项目代理只是以某种方式显示数据和信息。它主要将项目绘制成您想要的样子,因此它不一定创建一个完整的小部件。您可能需要使用样式化的项委托。这应该有你需要的所有信息
您使用QTableWidget方法setItemDelegate、setItemDelegateForColumn、setItemDelegateForRow将项委托设置到小部件。您创建了2000个按钮并将其添加到表中吗?如果是的话,当然会很慢。一次不需要2000个按钮,只需要尽可能多的可见按钮即可。这可以通过视图的item delegate实现。所以,若我向上和向下滚动,按钮会被创建和删除吗?它快吗?我想它会更快。但是,如果性能如此重要,那么最好使用QTableView(使用model和delegate)而不是QTableWidget.ok)来实现表,而不是使用provide的QTableWidget.thanx。您可以编写答案,而不是注释)委托的最大好处是,即使您使用实际的小部件,它们也不需要一次全部实例化。
//remove button
QToolButton* remove_button = new QToolButton(this);
remove_button->setText("Remove");
signalMapper->setMapping(remove_button, index);
connect(remove_button, SIGNAL(clicked()), signalMapper, SLOT(map()), Qt::UniqueConnection);
ui->locale_table->setCellWidget(index, 3, remove_button);