91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Qt實現字幕滾動效果的示例代碼

qt
小云
166
2023-08-11 14:11:16
欄目: 編程語言

以下是一個使用Qt實現字幕滾動效果的示例代碼:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QTimer>
#include <QPropertyAnimation>
class ScrollLabel : public QLabel
{
Q_OBJECT
Q_PROPERTY(int scrollPos READ scrollPos WRITE setScrollPos)
public:
ScrollLabel(QWidget* parent = nullptr) : QLabel(parent), m_scrollPos(0)
{
setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
setWordWrap(false);
}
int scrollPos() const { return m_scrollPos; }
void setScrollPos(int pos) { m_scrollPos = pos; update(); }
protected:
void paintEvent(QPaintEvent* event) override
{
QPainter painter(this);
painter.setClipRect(event->rect());
// 繪制文本
QString text = this->text();
int textWidth = fontMetrics().width(text);
int offset = -m_scrollPos;
while (offset < width()) {
painter.drawText(offset, 0, textWidth, height(), Qt::AlignLeft, text);
offset += textWidth;
}
}
private:
int m_scrollPos;
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget widget;
widget.resize(400, 100);
ScrollLabel label(&widget);
label.setGeometry(0, 0, 400, 100);
label.setText("This is a scrolling subtitle.");
// 創建動畫對象
QPropertyAnimation animation(&label, "scrollPos");
animation.setDuration(5000); // 動畫持續時間(毫秒)
animation.setStartValue(0);
animation.setEndValue(label.fontMetrics().width(label.text())); // 文本寬度
animation.setLoopCount(-1); // 無限循環播放
// 定時器觸發動畫開始
QTimer::singleShot(1000, [&animation]() {
animation.start();
});
widget.show();
return app.exec();
}
#include "main.moc"

這個示例中,我們定義了一個名為ScrollLabel的自定義QWidget,它繼承自QLabel。在ScrollLabel中,我們通過重寫paintEvent函數來實現滾動效果。我們使用QPropertyAnimation來控制滾動位置的動畫。在主函數中,我們創建了一個ScrollLabel實例,并設置了需要滾動的文本。然后使用定時器觸發動畫開始。運行程序后,你將看到字幕以滾動的方式在窗口中顯示。

0
响水县| 海阳市| 龙游县| 沾益县| 海城市| 右玉县| 安泽县| 富民县| 洪江市| 章丘市| 涞水县| 大名县| 华容县| 桦南县| 遵义县| 灌南县| 张掖市| 祁东县| 报价| 泉州市| 理塘县| 教育| 济南市| 长寿区| 商洛市| 揭阳市| 稻城县| 陇川县| 沐川县| 夹江县| 临沂市| 全州县| 武城县| 繁昌县| 手机| 蒙山县| 昌图县| 长顺县| 吉隆县| 郸城县| 二连浩特市|