【问题标题】:QStackedWidget navigation from page to pageQStackedWidget 从一页到另一页的导航
【发布时间】:2013-02-09 15:55:29
【问题描述】:

我认为我遇到了一个相当基本的 Qt 问题,但我无法弄清楚:

我有一个包含 QStackedWidget 的 QMainWindow。那里的所有页面小部件都是从 QWidget 派生的单独的类。

所以:

QMainWindow 在一个类中实现了 QStacked Window。 堆叠小部件内的所有其他页面都是添加的类,并且都有自己的 .ui,其中填充了通过 Designer 的按钮和列表。

为了导航到不同的页面,我可以在主窗口中访问:ui.stackedWidget->setCurrentIndex(2);

似乎我无法访问堆叠小部件内另一个页面上的 ui.stackedWidget?我无法访问 ui.stackedWidget 因为 Ui 是主窗口类中的私有成员。 (由 Qt 自动生成 - 使用 VS 插件添加 QT4 类)

我想知道,当单击属于此小部件内另一个页面的按钮时,如何跳转到堆叠小部件中的另一个页面?

注意:

所有页面都在mainWIdow的构造函数中添加到StackedWidget中:

ui.stackedWidget->addWidget(page1Widget);
ui.stackedWidget->addWidget(page2Widget);
// etc..

page1Widget 内的按钮点击信号槽示例:

connect(ui.btnViewData, SIGNAL(clicked()), this, SLOT(viewData()));

::viewData() 
{   
   // navigate to another page here. 
   // note: ui.stackedWidget->setCurrentIndex(3); is not accessible here!
}

【问题讨论】:

    标签: qt


    【解决方案1】:

    我相信将 connect() 和 viewData() 函数放在 QMainWindow 对象中会解决您的问题,因为主窗口可以访问子窗口小部件和 QStackedWidget 项目发出的信号。

    您可能需要为每个页面编写一个 Ui getter,然后执行类似的操作

    connect(page1Widget->getUi().btnViewData, SIGNAL(clicked()), this, SLOT(viewData)));
    

    希望对你有帮助, 干杯

    【讨论】:

    • 这实际上有助于在子页面中保持 ui 的私密性并通过公共 getter 将它们返回。 +1 但不能解决我的问题:这也意味着我必须在 mainWindow 中处理与特定类(page1Widget、page2Widget、..)相关的所有代码,因此我需要访问另一个中的所有其他按钮和小部件类也通过getter..这显然将使我的mainWindow几乎可以处理所有内容,包括所有视图等。我想在他们的文件中处理pageWidged的逻辑,并且只使用mainWindow进行导航
    • 我很确定有一种 Qt 方法可以通过发射信号的方式来实现。但我不确定如何......而且我没有时间看书......所有的学习是通过个人项目完成的。非常感谢
    • 当然,如果小部件中有大量按钮需要访问堆栈,那么这不是一个很好的解决方案,但您仍然可以让小部件自行处理其他所有事情!我正在考虑的另一个解决方案是在每个页面中放置一个指向 QStackedWidget 的成员变量。您只需要在主窗口中初始化它,然后您就可以处理来自页面小部件的所有内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多