用Qt实现一个桌面弹幕程序(四)--实现一个弹幕③

本文介绍了如何使用Qt实现各种类型的弹幕,包括顶部、底部和逆向弹幕,通过QPropertyAnimation实现动画效果。此外,还展示了如何展示动画GIF和图片弹幕,利用QMovie和QPixmap加载资源,并通过QSequentialAnimationGroup实现复杂动画序列。
摘要由CSDN通过智能技术生成

不同种类弹幕的实现

在上一篇文章中,杰洛君带大家实现了从屏幕右方飞行到左方的弹幕。\(^o^)/

但是弹幕并不止这一种,有很多很多不同的弹幕种类,包括但不限于:

  • 顶部弹幕 – – 弹幕悬停于屏幕顶部中央一段时间
  • 底部弹幕 – – 弹幕悬停在屏幕底部中央一段时间
  • 逆向弹幕 – – 弹幕从屏幕的右方飞行到屏幕左方

实现起来也是非常简单的~

继续使用QPropertyAnimation作为弹幕的动画实现方式

顶部和底部弹幕:

开始位置和结束位置设置为屏幕中间即可
设置停留时间
动画结束时销毁自身

代码实现:

QPropertyAnimation * anim2=new QPropertyAnimation(this, "pos");
anim2->setDuration(7000);
anim2->setEasingCurve(QEasingCurve::Linear);
this->setWindowOpacity(this->getTransparency());
        connect(anim2,SIGNAL(finished()),this,SLOT(deleteLater()));

问题又来了,顶部弹幕和底部弹幕的坐标如何确定呢?

这两种弹幕的显示是位于屏幕中央,所以很自然可以想到 用 屏幕的宽度 - 弹幕的宽度除以2 得到弹幕的横坐标位置。

但是纵坐标呢?

纵坐标位置应该和上一个弹幕位置相关,也就是说,纵坐标的位置应该为字体高度的整数倍,这样这两种弹幕的文字才能不重叠。

所以记得用两个变量来记录顶部弹幕数量和底部弹幕数量哦~

至于逆向弹幕的话就更简单了,把正向弹幕的起始位置和结束位置互换就可以了~这里就不用代码写出了~

杰洛君 怒偷一懒233O(∩_∩)O哈哈~

(p.s. Qt的动画效果有很多,感兴趣的同学可以了解一下 QEasingCurve 类 , 恩恩,就是上面代码中经常出现的 QEasingCurve::Linear 部分,在这里是用了线性,你可以切换不同的类型来体验体验他们的

Qt实现点击按钮弹出一个新界面,你需要以下步骤: 1. 创建一个新的 QWidget 类,作为你要弹出的新界面。 2. 在 QWidget 类中添加你需要的控件,比如按钮、文本框等。 3. 在主窗口中创建一个 QPushButton 控件,并将其添加到布局中。 4. 为 QPushButton 控件添加一个槽函数,在槽函数中创建新的 QWidget 对象,并显示它。 下面是一个简单的示例代码: ```cpp // 新界面类 class NewWidget : public QWidget { public: NewWidget(QWidget *parent = nullptr) : QWidget(parent) { // 添加控件 QLabel *label = new QLabel("Hello, World!", this); label->setAlignment(Qt::AlignCenter); label->setStyleSheet("font-size: 20px;"); } }; // 主窗口类 class MainWindow : public QMainWindow { public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 添加按钮 QPushButton *button = new QPushButton("Click me", this); connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClick); setCentralWidget(button); } private slots: void onButtonClick() { // 弹出新界面 NewWidget *newWidget = new NewWidget(this); newWidget->setWindowTitle("New Widget"); newWidget->show(); } }; // 应用程序入口 int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow window; window.show(); return app.exec(); } ``` 在这个示例中,我们创建了一个 NewWidget 类作为新界面,添加了一个 QLabel 控件,并设置了字体样式。在主窗口中,我们创建了一个 QPushButton 控件,并将其添加到中央部件中。然后,我们为按钮添加了一个槽函数 onButtonClick(),在这个函数中创建了一个 NewWidget 对象,并显示它。 当用户点击按钮时,程序会执行 onButtonClick() 函数,弹出一个新的 NewWidget 界面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值