Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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
qtui:加速大表_Qt_Qtablewidget - Fatal编程技术网

qtui:加速大表

qtui:加速大表,qt,qtablewidget,Qt,Qtablewidget,我有一个超过2000行的QTableWidget表。当我在每行中添加QToolButton“Remove”时,它会变得有点慢)。为什么表格变慢,按钮ui或信号映射器?我怎样才能加速我的桌子,也许用其他东西来代替按钮,或者用其他方式连接信号 我的按钮代码: // mapper for remove buttons QSignalMapper* signalMapper = new QSignalMapper(this); connect(signalMapper, SIG

我有一个超过2000行的QTableWidget表。当我在每行中添加QToolButton“Remove”时,它会变得有点慢)。为什么表格变慢,按钮ui或信号映射器?我怎样才能加速我的桌子,也许用其他东西来代替按钮,或者用其他方式连接信号


我的按钮代码:

    // 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);