【问题标题】:How to switch between two QGraphicsView inside a QWidget如何在 QWidget 中的两个 QGraphicsView 之间切换
【发布时间】:2023-02-07 04:11:02
【问题描述】:

我有两个不同的视图显示在 QWidget 窗口中。每个视图都有一个单独的 QGraphicsScene。 我想在单击按钮时在两个视图之间切换。

这是我当前的实现:

    void toggleUi(bool type){
    QGraphicsView* currentView;
    
    if(bool){
     currentView = getFirstView(); // returns QGraphicsView of first type
    }
    else{
     currentView = getSecondView(); // returns QGraphicsView of second type
    }

    QLayout* layout = widget->layout ();
    if (layout != 0)
    {
    QLayoutItem *item;
    while ((item = layout->takeAt(0)) != 0)
        layout->removeItem (item);
    delete layout;
    }

   QVBoxLayout *layout = new QVBoxLayout(this);
   layout->addWidget(currentView);
}

问题:即使在删除布局并添加新布局后,两个视图在切换时也会相互重叠显示。 两个视图在没有切换的情况下都呈现良好。 有更好/另一种方法吗?

【问题讨论】:

  • 不要乱用布局。此外,从布局中删除小部件并不会隐藏它,它只会使该小部件不再受布局管理.使用 QStackedWidget。
  • 明白你的意思了。有没有一种方法可以在没有 QStackedWidget 的情况下仅使用 QWidget 来切换视图?
  • 你为什么不想使用 QStackedWidget?
  • @Tim 通过查看您发布的 sn-p 清楚了,QStackedWidget 是更好的方法。

标签: qt qt5 qwidget


【解决方案1】:

使用QStackedWidget!使用addWidget函数添加小部件:

QStackedWidget *stackedWidget = new QStackedWidget(this);
stackedWidget->addWidget(getFirstView());
stackedWidget->addWidget(getSecoundView());

QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(stackedWidget);
setLayout(layout);

以下是在小部件之间切换的方法:

void toggleUi(bool type){
    if(condition)
        stackedWidget->setCurrentindex(0)
    else
        stackedWidget->setCurrentindex(1)

我希望它有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多