我想我有一个相当基本的 Qt 问题,但我无法弄清楚:
我有一个包含 QStackedWidget 的 QMainWindow。那里的所有页面小部件都是从 QWidget 派生的单独类。
所以:
QMainWindow 在一个类中实现了 QStacked Window。堆叠小部件内的所有其他页面都添加了类,并且都有自己的 .ui 充满按钮和通过设计器列出的列表。
为了导航到不同的页面,在 Mainwindow 中,我可以访问: ui.stackedWidget->setCurrentIndex(2);
似乎我无权访问堆叠小部件内另一个页面上的 ui.stackedWidget?我无法访问 ui.stackedWidget 因为 Ui 是 mainwindow 类中的私有成员。(由 Qt 自动生成 - 使用 VS 插件添加 QT4 类)
我想知道,当单击属于此小部件中另一个页面的按钮时,如何跳转到堆叠小部件中的另一个页面?
笔记:
所有页面都添加到 mainWINdow 的构造函数中的 StackedWidget 中:
ui.stackedWidget->addWidget(page1Widget);
ui.stackedWidget->addWidget(page2Widget);
// etc..
Run Code Online (Sandbox Code Playgroud)
page1Widget 中的按钮单击信号槽示例:
connect(ui.btnViewData, SIGNAL(clicked()), this, SLOT(viewData()));
::viewData()
{
// navigate to another page here.
// note: ui.stackedWidget->setCurrentIndex(3); is not accessible here!
}
Run Code Online (Sandbox Code Playgroud)
小智 4
我相信将 connect() 和 viewData() 函数放入 QMainWindow 对象中将解决您的问题,因为主窗口可以访问子窗口小部件和 QStackedWidget 项发出的信号。
您可能需要为每个页面编写一个 Ui getter,然后执行类似的操作
connect(page1Widget->getUi().btnViewData, SIGNAL(clicked()), this, SLOT(viewData)));
Run Code Online (Sandbox Code Playgroud)
希望有帮助,干杯