【QT】QStackedWidget一利器,常在项目中的使用

发布于:2024-05-03 ⋅ 阅读:(40) ⋅ 点赞:(0)

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 特有信号

  1. currentChanged(int):

    • QStackedWidget 的当前活动页面改变时发射。参数是新页面的索引。这可以用来触发与页面切换相关的事件处理。
  2. widgetRemoved(int):

    • 当一个小部件(页面)从 QStackedWidget 中移除时发射。参数是被移除的小部件的索引。这个信号用于通知应用某个页面已经被移除,可能用于更新界面或释放资源。

QWidget 和 QObject 通用信号

  1. customContextMenuRequested(QPoint):

    • 当用户请求一个自定义上下文菜单(通常通过右键点击)时发射。参数是点击位置的坐标,这个坐标是相对于小部件的。这个信号常用于弹出自定义的右键菜单。
  2. windowIconChanged(QIcon):

    • 当小部件的窗口图标发生变化时发射。这通常用于多文档界面或者应用程序窗口,当窗口图标更新显示时通知关联的界面元素也更新图标。
  3. windowIconTextChanged(QString):

    • 当小部件的窗口图标旁的文本发生变化时发射。这不是非常常见,某些平台可能会在任务栏的图标旁显示文本。
  4. windowTitleChanged(QString):

    • 当小部件的窗口标题变化时发射。用于响应窗口标题的更新,可能用于日志记录或修改任务栏、窗口列表中显示的标题。

QObject 基类信号

  1. destroyed():

    • 当对象即将被销毁时发射。这个信号在对象的析构过程开始之前发射,可以用来进行清理工作。
  2. destroyed(QObject*):

    • destroyed() 类似,但这个信号还会传递一个指向被销毁对象的指针。这允许连接到此信号的槽函数知道具体是哪个对象被销毁了。
  3. objectNameChanged(QString):

    • 当对象的 objectName 属性改变时发射。objectName 是一个在 QObject 及其子类中用来标识对象的字符串。这个信号可以用于调试或者更新基于对象名称的 UI 元素。

这些信号提供了强大的工具来监控和响应 GUI 和应用程序状态的变化。在设计交互式应用程序时合理使用这些信号,可以使应用程序更加动态和响应用户操作。


网站公告

今日签到

点亮在社区的每一天
去签到