赞
踩
QStackedWidget
是 Qt 中用于层叠多个子窗口或页面的部件,但只显示其中一个。这个组件通常用于创建具有多个步骤或多个不同视图的向导式界面。用户可以切换视图,但一次只能看到一个视图。
QStackedWidget
提供了几个主要方法用来管理其包含的页面:
addWidget(QWidget* widget)
: 添加一个页面到堆栈。setCurrentIndex(int index)
: 设置当前显示的页面索引。setCurrentWidget(QWidget* widget)
: 设置当前显示的页面。removeWidget(QWidget* widget)
: 从堆栈中移除一个页面。与许多 Qt 的其他组件不同,QStackedWidget
本身并不提供很多信号,其主要信号是:
currentChanged(int index)
: 当当前显示的页面改变时发射。参数 index
是新显示的页面的索引。QStackedWidget
没有特定的槽方法,它主要通过程序代码(如按钮点击事件)控制页面的切换。
QStackedWidget
下面是一个简单的示例,展示如何使用 QStackedWidget
来切换不同的页面:
#include <QApplication>
#include <QPushButton>
#include <QStackedWidget>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
// 创建 QStackedWidget
QStackedWidget *stackedWidget = new QStackedWidget;
layout->addWidget(stackedWidget);
// 添加几个页面
QWidget *page1 = new QWidget;
page1->setStyleSheet("background-color: red;");
stackedWidget->addWidget(page1);
QWidget *page2 = new QWidget;
page2->setStyleSheet("background-color: green;");
stackedWidget->addWidget(page2);
QWidget *page3 = new QWidget;
page3->setStyleSheet("background-color: blue;");
stackedWidget->addWidget(page3);
// 创建按钮切换页面
QPushButton *button = new QPushButton("Next Page");
layout->addWidget(button);
QObject::connect(button, &QPushButton::clicked, [stackedWidget]() {
int currentIndex = stackedWidget->currentIndex();
int nextIndex = (currentIndex + 1) % stackedWidget->count();
stackedWidget->setCurrentIndex(nextIndex);
});
// 连接 currentChanged 信号
QObject::connect(stackedWidget, &QStackedWidget::currentChanged, [](int index) {
qDebug() << "Current page index changed to:" << index;
});
window.show();
return app.exec();
}
这种方式非常适合于创建多步骤的用户界面,或者在同一个窗口中需要展示多个不同内容的情况。
currentChanged(int)
:
QStackedWidget
的当前活动页面改变时发射。参数是新页面的索引。这可以用来触发与页面切换相关的事件处理。widgetRemoved(int)
:
QStackedWidget
中移除时发射。参数是被移除的小部件的索引。这个信号用于通知应用某个页面已经被移除,可能用于更新界面或释放资源。customContextMenuRequested(QPoint)
:
windowIconChanged(QIcon)
:
windowIconTextChanged(QString)
:
windowTitleChanged(QString)
:
destroyed()
:
destroyed(QObject*)
:
destroyed()
类似,但这个信号还会传递一个指向被销毁对象的指针。这允许连接到此信号的槽函数知道具体是哪个对象被销毁了。objectNameChanged(QString)
:
objectName
属性改变时发射。objectName
是一个在 QObject 及其子类中用来标识对象的字符串。这个信号可以用于调试或者更新基于对象名称的 UI 元素。这些信号提供了强大的工具来监控和响应 GUI 和应用程序状态的变化。在设计交互式应用程序时合理使用这些信号,可以使应用程序更加动态和响应用户操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。