堆栈的视图或生成需要?

时间:2015-12-14 15:19:40

标签: performance qt qwidget

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

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

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

免责声明:这不是一个意见问题 - 我在询问Qt的最佳实践和每种情况下的表现。感谢。enter image description here

1 个答案:

答案 0 :(得分:1)

以下是使用QListWidgetQListWidgetItem控制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的自定义用户数据中。