qtstackedwidget实现滑屏效果
时间: 2023-10-24 12:08:28 浏览: 95
Qt中的QStackedWidget控件可以在同一窗口中切换多个子窗口。通过使用QPropertyAnimation类,可以实现滑屏效果。
以下是一个简单的示例,演示如何使用QStackedWidget和QPropertyAnimation类实现滑屏效果:
```
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建QStackedWidget控件
QStackedWidget stackedWidget;
// 创建两个子窗口
QWidget *widget1 = new QWidget(&stackedWidget);
widget1->setStyleSheet("background-color: red;");
stackedWidget.addWidget(widget1);
QWidget *widget2 = new QWidget(&stackedWidget);
widget2->setStyleSheet("background-color: blue;");
stackedWidget.addWidget(widget2);
// 设置QPropertyAnimation类
QPropertyAnimation animation(&stackedWidget, "geometry");
animation.setDuration(500);
animation.setEasingCurve(QEasingCurve::InOutQuad);
// 创建滑动按钮
QPushButton *button1 = new QPushButton("Slide to widget 1");
QPushButton *button2 = new QPushButton("Slide to widget 2");
// 按下滑动按钮时,启动动画
QObject::connect(button1, &QPushButton::clicked, [&]() {
animation.setStartValue(stackedWidget.geometry());
animation.setEndValue(QRect(-stackedWidget.width(), 0, stackedWidget.width(), stackedWidget.height()));
animation.start();
});
QObject::connect(button2, &QPushButton::clicked, [&]() {
animation.setStartValue(stackedWidget.geometry());
animation.setEndValue(QRect(stackedWidget.width(), 0, stackedWidget.width(), stackedWidget.height()));
animation.start();
});
// 创建主窗口
QWidget mainWindow;
QVBoxLayout layout(&mainWindow);
layout.addWidget(&stackedWidget);
QHBoxLayout buttonLayout;
buttonLayout.addWidget(button1);
buttonLayout.addWidget(button2);
layout.addLayout(&buttonLayout);
mainWindow.show();
return app.exec();
}
```
在上面的示例中,我们创建了两个子窗口,并将它们添加到QStackedWidget控件中。然后,我们创建了两个QPushButton按钮,分别用于滑动到每个子窗口。
在按钮的clicked信号中,我们设置了QPropertyAnimation类的起始和结束值,并启动了动画。在这种情况下,我们将子窗口从左侧滑动到右侧,并从右侧滑动到左侧。
最后,我们将QStackedWidget和QPushButton添加到主窗口中,并显示主窗口。当我们按下滑动按钮时,QStackedWidget将通过动画从一个子窗口滑动到另一个子窗口。
阅读全文