最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實現(xiàn)字幕滾動效果的示例代碼

 更新時間:2022年06月17日 09:42:08   作者:wendy_ya  
這篇文章主要介紹了Qt如何利用QTimer實現(xiàn)字幕滾動功能,并且可以實現(xiàn)自行更改文本內(nèi)容、自適應(yīng)文本大小、自由調(diào)整速度等功能,感興趣的可以學(xué)習(xí)一下

一、項目介紹

利用QTimer實現(xiàn)字幕滾動功能,可以實現(xiàn)自行更改文本內(nèi)容、自適應(yīng)文本大小、自由調(diào)整速度等功能。

二、項目基本配置

新建一個Qt案例,項目名稱為“TextScroll”,基類選擇“QWidget”,取消創(chuàng)建UI界面復(fù)選框的選中狀態(tài),完成項目創(chuàng)建。

三、UI界面設(shè)計

無UI界面

四、主程序?qū)崿F(xiàn)

4.1 widget.h頭文件

聲明私有變量和事件:

private:

    QTimer* timer;          //時間定時器
    QRgb   textColor;       //文本顏色
    QString m_text;         //文本內(nèi)容
    QString m_showText;     //顯示
    QFont font;             //字體
    int m_ms;
    int m_pixelSize;
    int m_moveOffset;
    int m_moveSize;
    int blankSuffix;     //空白后綴,值越大空白后綴越多
    float speed;        //滑動速度,值越大越快

    void paintEvent(QPaintEvent *event);
    void resizeEvent(QResizeEvent *event);

聲明函數(shù)和槽函數(shù):

public:
    void setDelay(int ms,int pixelSize);  //設(shè)置滾動延遲,多少ms滾動多少像素點

    void setText(QString text,QRgb textColor,float speed=0.70,int blankSuffix=20); //設(shè)置字體,調(diào)用該函數(shù)后,將會自動啟動定時器來滾動字幕
    //void restart();

public slots:
    void timeOut();

4.2 widget.cpp源文件

主函數(shù)內(nèi)容如下:

    resize(600,100);//調(diào)整窗口大小
    timer = new QTimer(this);//創(chuàng)建定時器
    connect(timer, SIGNAL(timeout()), this, SLOT(timeOut()));

    QString text="人生百相,世態(tài)萬千,悲悲喜喜,才構(gòu)成了人生的完美;謀事在人,成事在天。"
        "做過的事不要后悔。經(jīng)??梢钥吹讲簧偃俗栽棺园?
        "為曾經(jīng)做過的錯事后悔不已,為過去的事而消沉,為過去的事而落魄。世上永遠(yuǎn)沒有后悔藥。";
    QRgb textColor=qRgb(67,142,219);//字體顏色——藍(lán)色
    float speed=0.4;
    int blankSuffix=0;
    setText(text,textColor,speed,blankSuffix);

timeOut()槽函數(shù):

//槽函數(shù)
void Widget::timeOut(){
    qDebug()<<m_moveOffset<<m_moveSize;
    m_moveOffset+=m_pixelSize;

    if(m_moveOffset>m_moveSize)
    {
        m_moveOffset= 0;
    }
    update();
}

調(diào)整窗口大小resizeEvent事件:

void Widget::resizeEvent(QResizeEvent *event)
{
    font.setPixelSize(event->size().height()*0.75);//字體大小(這里設(shè)置為窗口高度的0.75倍)

    m_showText = m_text;
    QFontMetrics metrics(font);
    int char_w = metrics.horizontalAdvance(" ");//Qt5.11之后,之前請用width()
    setDelay(30,char_w*speed);//滾動延時
    int blankLine =width()/char_w+1;

    for(int i=0;i<blankLine;i++)
    {
        m_showText.insert(0," ");//開頭插入blankLine個空格
    }
    m_moveSize=metrics.horizontalAdvance(m_showText)+blankSuffix;
    m_moveOffset=0;

    update();
}

重寫繪制事件paintEvent:

//繪圖事件
void Widget::paintEvent(QPaintEvent *event)
{

      QPainter painter(this);
      painter.setFont(font);//設(shè)置字體
      painter.setPen(QColor(120,120,120));//設(shè)置畫筆顏色——灰色
      painter.drawRect(QRect(0,0,width()-1,height()-1));//主窗口繪制矩形
      painter.setPen(QColor(textColor));//文字顏色
      painter.drawText(QRect(-m_moveOffset,0,width()-1+m_moveOffset,height()-1),
                       Qt::AlignVCenter|Qt::AlignLeft,m_showText);//繪制文字,水平居左垂直居中
}

定義滾動延遲函數(shù):

//設(shè)置滾動延遲,多少ms滾動多少像素點pixelSize
void Widget::setDelay(int ms,int pixelSize)
{

    this->m_ms=ms;
    this->m_pixelSize=pixelSize;
}

設(shè)置字體相關(guān)信息:

//設(shè)置字體相關(guān)信息(text:字體內(nèi)容,textColor:顏色,speed:字體滾動速度,blankSuffix:留白大小)
void Widget::setText(QString text, QRgb textColor, float speed, int blankSuffix)
{
    this->blankSuffix = blankSuffix;
    this->speed = speed;

    font.setFamily("Microsoft Yahei");//字體樣式——微軟雅黑
    font.setPixelSize(height()*0.0001); //字體像素大小

    this->textColor = textColor;    //字體顏色

    m_text = text;                  //文本內(nèi)容
    m_showText = m_text;            //顯示內(nèi)容

    //計算字符大小
    QFontMetrics metrics(font);
    int char_w = metrics.horizontalAdvance(" ");//Qt5.11之后,之前請用width()
    setDelay(50,char_w*speed);//調(diào)用setDelay()函數(shù),設(shè)置滾動延時

    int blankLine =width()/char_w+2;//

    for(int i=0;i<blankLine;i++)
    {
        m_showText.insert(0," ");//開頭插入blankLine個空格
    }


    m_moveSize=metrics.horizontalAdvance(m_showText)+blankSuffix;

    m_moveOffset=0;
    //如果計時器沒有運行
    if(!timer->isActive())
    {
        if(m_ms)
        {
            timer->start(m_ms);//啟動計時,以m_ms為間隔
        }
    }

}

五、效果演示

完整效果如下:

以上就是Qt實現(xiàn)字幕滾動效果的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Qt字幕滾動的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中如何修改const變量你知道嗎

    C++中如何修改const變量你知道嗎

    這篇文章主要為大家詳細(xì)介紹了C++修改const變量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言-I/O流設(shè)計實驗

    C語言-I/O流設(shè)計實驗

    編程語言的I/O類庫中常常使用流這個抽象的概念,它代表任何有能力產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源對象或時有能力接收數(shù)據(jù)的接收端對象,本文為大家介紹C語言中I/O系統(tǒng)基礎(chǔ)知識
    2021-07-07
  • Visual?Studio?2022編譯C++20代碼

    Visual?Studio?2022編譯C++20代碼

    本文主要介紹了Visual?Studio?2022編譯C++20代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++ OpenCV生成蒙太奇圖像的示例詳解

    C++ OpenCV生成蒙太奇圖像的示例詳解

    圖片的蒙太奇效果,一般稱為馬賽克圖。由很多小圖拼接成一個大圖。這篇文章主要為大家介紹如何利用C++ OpenCV實現(xiàn)生成蒙太奇圖像,感興趣的可以了解一下
    2022-01-01
  • 關(guān)閉顯示器軟件代碼分享

    關(guān)閉顯示器軟件代碼分享

    這篇文章主要介紹了使用程序如何關(guān)閉顯示器的代碼,需要的朋友可以參考下
    2014-01-01
  • 詳解C語言的mem系列函數(shù)

    詳解C語言的mem系列函數(shù)

    這篇文章主要為大家詳細(xì)介紹了C語言的mem系列函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • c++ 動態(tài)內(nèi)存分配相關(guān)總結(jié)

    c++ 動態(tài)內(nèi)存分配相關(guān)總結(jié)

    這篇文章主要介紹了c++ 動態(tài)內(nèi)存分配相關(guān)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C++實現(xiàn)下載的代碼

    C++實現(xiàn)下載的代碼

    這篇文章主要介紹了C++實現(xiàn)下載的代碼,以下載百度圖片為例較為完整的講述了C++下載的具體實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言中開辟內(nèi)存有很多種方式,目前我們最常用的也就是數(shù)組,但數(shù)組是在我們用到他之前就得設(shè)定好它的長度,有時很不方便。隨意我們來探究動態(tài)內(nèi)存管理
    2021-11-11
  • 用C語言程序判斷大小端模式

    用C語言程序判斷大小端模式

    本文介紹了用C語言程序判斷大小端的方法,與大家分享一下。
    2013-04-04

最新評論

泊头市| 绥阳县| 广德县| 平江县| 阿鲁科尔沁旗| 大埔区| 阿瓦提县| 获嘉县| 星座| 司法| 定陶县| 德庆县| 五常市| 马鞍山市| 西乌珠穆沁旗| 朝阳县| 磐石市| 惠安县| 三穗县| 凤冈县| 阳信县| 周宁县| 祁阳县| 远安县| 定陶县| 若羌县| 泸西县| 太保市| 康马县| 易门县| 塔城市| 广昌县| 永安市| 泽普县| 武定县| 大洼县| 河西区| 商南县| 孟州市| 石渠县| 如皋市|