中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
文安县| 桓台县| 新宾| 黎平县| 碌曲县| 哈密市| 庆阳市| 揭阳市| 获嘉县| 大同县| 湛江市| 手游| 师宗县| 京山县| 天长市| 裕民县| 中阳县| 万山特区| 静海县| 亳州市| 衡阳县| 包头市| 绍兴市| 广昌县| 三门峡市| 浏阳市| 丰都县| 眉山市| 溧阳市| 沛县| 高台县| 清镇市| 金门县| 肇源县| 星座| 玛多县| 兰考县| 太湖县| 伊吾县| 宁远县| 祁连县|