视图堆栈或按需生成?

Stack of views or generate on need?

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

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

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

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

这是一个使用 QListWidget and QListWidgetItem controlling the QStackedWidget 的例子:

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

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