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();
}
这种方式非常适合于创建多步骤的用户界面,或者在同一个窗口中需要展示多个不同内容的情况。
信号专栏
QStackedWidget 特有信号
-
currentChanged(int)
:- 当
QStackedWidget
的当前活动页面改变时发射。参数是新页面的索引。这可以用来触发与页面切换相关的事件处理。
- 当
-
widgetRemoved(int)
:- 当一个小部件(页面)从
QStackedWidget
中移除时发射。参数是被移除的小部件的索引。这个信号用于通知应用某个页面已经被移除,可能用于更新界面或释放资源。
- 当一个小部件(页面)从
QWidget 和 QObject 通用信号
-
customContextMenuRequested(QPoint)
:- 当用户请求一个自定义上下文菜单(通常通过右键点击)时发射。参数是点击位置的坐标,这个坐标是相对于小部件的。这个信号常用于弹出自定义的右键菜单。
-
windowIconChanged(QIcon)
:- 当小部件的窗口图标发生变化时发射。这通常用于多文档界面或者应用程序窗口,当窗口图标更新显示时通知关联的界面元素也更新图标。
-
windowIconTextChanged(QString)
:- 当小部件的窗口图标旁的文本发生变化时发射。这不是非常常见,某些平台可能会在任务栏的图标旁显示文本。
-
windowTitleChanged(QString)
:- 当小部件的窗口标题变化时发射。用于响应窗口标题的更新,可能用于日志记录或修改任务栏、窗口列表中显示的标题。
QObject 基类信号
-
destroyed()
:- 当对象即将被销毁时发射。这个信号在对象的析构过程开始之前发射,可以用来进行清理工作。
-
destroyed(QObject*)
:- 与
destroyed()
类似,但这个信号还会传递一个指向被销毁对象的指针。这允许连接到此信号的槽函数知道具体是哪个对象被销毁了。
- 与
-
objectNameChanged(QString)
:- 当对象的
objectName
属性改变时发射。objectName
是一个在 QObject 及其子类中用来标识对象的字符串。这个信号可以用于调试或者更新基于对象名称的 UI 元素。
- 当对象的
这些信号提供了强大的工具来监控和响应 GUI 和应用程序状态的变化。在设计交互式应用程序时合理使用这些信号,可以使应用程序更加动态和响应用户操作。