Performance 视图堆栈或根据需要生成?

Performance 视图堆栈或根据需要生成?,performance,qt,qwidget,Performance,Qt,Qwidget,让我们假设,我正在创建一个图像编辑器,类似于Photoshop,但在Qt中更简单 我遇到了下一个问题——我有一个项目列表,一次只能选择其中一个。每个项目都得到了QWidget,应该显示在main窗口中。问题是——我应该在选择项目时创建它们(小部件),还是只管理这些小部件的可见性。目前,我得到了第二个解决方案——当选择项时,我将QWidget的可见性设置为true,并隐藏当前小部件。在性能方面,什么更好?我是Qt新手,不知道在这种情况下使用哪种做法更好 为了更好地理解-附加一张带有侧边栏的图片和Q

让我们假设,我正在创建一个图像编辑器,类似于Photoshop,但在Qt中更简单

我遇到了下一个问题——我有一个项目列表,一次只能选择其中一个。每个项目都得到了
QWidget
,应该显示在
main窗口中。问题是——我应该在选择项目时创建它们(小部件),还是只管理这些小部件的可见性。目前,我得到了第二个解决方案——当选择项时,我将
QWidget
的可见性设置为
true
,并隐藏当前小部件。在性能方面,什么更好?我是Qt新手,不知道在这种情况下使用哪种做法更好

为了更好地理解-附加一张带有侧边栏的图片和QWidget(模糊女性)的位置

免责声明:这不是一个意见问题-我问的是Qt的最佳实践以及每种情况下的性能。谢谢。

以下是使用和控制的示例:

右侧小部件的可见性由QStackedWidget控制。在QListWidget中的选择更改时设置相应的widget索引。
小部件索引可以存储在分配给相应QListWidgetItem的自定义用户数据中。

您可以使用QListWidgetItem填充的QListWidget和分配给它们的自定义小部件。QListWidget可以确保您只选择了一个项目。再次感谢您对QListWidget的想法,但关键是我将QWidget绑定到我的自定义QListWidgetItem,作为附加项目-如右侧所示,在右侧所示。我应该创建它们并管理它们的可见性,还是故意创建它们?@htzfun为此,您可以使用QStackedWidget使所有小部件保持在右侧。当列表中的选择发生变化时,您可以设置相应的当前小部件索引。您可以通过QListWidgetItem上的自定义用户数据集关联小部件索引。这正是我所需要的!再次感谢你。你能把这个评论移到答案部分吗?我会接受的。@htzfun我已经更新了答案,但这只是一个例子。根据您的应用程序,您还必须注意小部件的所有权以及它们在运行时创建和删除的方式。
// Stacked widget
QStackedWidget *pStackedWidget = new QStackedWidget();

// Creating widget list
QListWidget *pListWidget = new QListWidget();
connect(pListWidget, &QListWidget::itemSelectionChanged,
    [pStackedWidget, pListWidget]() {
        pStackedWidget->setCurrentIndex(
            pListWidget->currentItem()->data(Qt::UserRole)
        );
    }
);

// Populating widget list with items
QListWidgetItem *pItem = new QListWidgetItem();
pListWidget->addItem(pItem);
pItem->setItemWidget(pItem, pWidget);
pItem->setData(Qt::UserRole, 0 /* widget index on stacked layout */);