【问题标题】:QStackWidget navigate from page1 to page 2QStack Widget 从第 1 页导航到第 2 页
【发布时间】:2018-03-31 04:11:38
【问题描述】:

我有一个基类 MainWindow 继承自 QMainWindowMainWindow 在其 Ui 文件中有 QSTackedWidget。我在不同的类中有Page1Page2 所有页面小部件都有从QWidget 派生的单独类。

QMainWindow 在一个类中实现QStackedWindow。堆叠小部件内的所有其他页面都是添加的类,并且都有自己的 .ui 填充按钮

我实现了

Page1* page1obj = new Page1;
Page2* page2obj = new Page2;



ui->stackedWidget->insertWidget(0,page1obj);   
ui->stackedWidget->insertWidget(1,page2obj);

它有一个带有下一步按钮的 ui 文件。点击它应该转到第 2 页;

Page1.cpp

connect(m_ui>nextButton,&QPushButton::clicked,this,&Page1::onclicked);      

void Page1::onclicked()
{

    Mainwindow* obj = new MainWindow;
    obj->openPage2();  
}

问题在于单击按钮会打开一个新窗口,而不是堆叠格式的单个窗口。我哪里错了??如何解决这个问题?

【问题讨论】:

  • 我纠正了一个错字。
  • 如果您从问题的陈述开始,您的问题会更清楚,并给出一个有助于其他人诊断问题的代码的最小完整示例 (stackoverflow.com/help/mcve)。
  • 我很抱歉..是stackoverflow的新手。

标签: c++ qt qt5 qwidget qstackedwidget


【解决方案1】:

不必在MainWindow中进行更改,您可以从页面中进行更改。

当您将一个小部件插入QStackedWidget 时,它被设置为父小部件,因此我们可以使用parentWidget() 方法访问QStackedWidget

void Page1::onclicked()
{
    QStackedWidget *stack = qobject_cast<QStackedWidget* >(parentWidget());
    if(stack)
        stack->setCurrentIndex(1);
}

更新:

如果您想使用MainWindow,您不必创建MainWindow,而是使用父母关系访问它并最终进行强制转换

mainwindow
└── stackedwidget
    ├── page1
    └── page2

void Page1::onclicked()
{
    MainWindow *mainwindow = qobject_cast<MainWindow* >(parentWidget()->parentWidget());
    if(mainwindow)
        mainwindow->openPage2();
}

【讨论】:

  • 我需要向 Mainwindow.cpp 发送信号以将 index 更改为 1 。但是使用 new 运算符它会打开 Page2 作为新的弹出窗口,而不是从父窗口切换到第 2 页
  • @Rubina 为什么要把它发送到 MainWindow ?,你试过我的解决方案了吗?
  • MainWindow 有 QStackedWidget 并且里面有所有页面,所以我需要向 Mainwindow 发送信号来来回交换
  • @Rubina 我添加了另一个可能的解决方案:
  • 我试过你的解决方案。从第 1 页移动到第 2 页效果很好,但从第 2 页到第 3 页或从第 2 页到第 1 页变得无响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
相关资源
最近更新 更多