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

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt如何實現字幕滾動效果

發布時間:2022-06-17 14:10:52 來源:億速云 閱讀:813 作者:iii 欄目:開發技術

這篇文章主要介紹“Qt如何實現字幕滾動效果”,在日常操作中,相信很多人在Qt如何實現字幕滾動效果問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Qt如何實現字幕滾動效果”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、項目介紹

    利用QTimer實現字幕滾動功能,可以實現自行更改文本內容、自適應文本大小、自由調整速度等功能。

    二、項目基本配置

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

    三、UI界面設計

    無UI界面

    四、主程序實現

    4.1 widget.h頭文件

    聲明私有變量和事件:

    private:
    
        QTimer* timer;          //時間定時器
        QRgb   textColor;       //文本顏色
        QString m_text;         //文本內容
        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);

    聲明函數和槽函數:

    public:
        void setDelay(int ms,int pixelSize);  //設置滾動延遲,多少ms滾動多少像素點
    
        void setText(QString text,QRgb textColor,float speed=0.70,int blankSuffix=20); //設置字體,調用該函數后,將會自動啟動定時器來滾動字幕
        //void restart();
    
    public slots:
        void timeOut();

    4.2 widget.cpp源文件

    主函數內容如下:

        resize(600,100);//調整窗口大小
        timer = new QTimer(this);//創建定時器
        connect(timer, SIGNAL(timeout()), this, SLOT(timeOut()));
    
        QString text="人生百相,世態萬千,悲悲喜喜,才構成了人生的完美;謀事在人,成事在天。"
            "做過的事不要后悔。經常可以看到不少人自怨自艾,"
            "為曾經做過的錯事后悔不已,為過去的事而消沉,為過去的事而落魄。世上永遠沒有后悔藥。";
        QRgb textColor=qRgb(67,142,219);//字體顏色——藍色
        float speed=0.4;
        int blankSuffix=0;
        setText(text,textColor,speed,blankSuffix);

    timeOut()槽函數:

    //槽函數
    void Widget::timeOut(){
        qDebug()<<m_moveOffset<<m_moveSize;
        m_moveOffset+=m_pixelSize;
    
        if(m_moveOffset>m_moveSize)
        {
            m_moveOffset= 0;
        }
        update();
    }

    調整窗口大小resizeEvent事件:

    void Widget::resizeEvent(QResizeEvent *event)
    {
        font.setPixelSize(event->size().height()*0.75);//字體大小(這里設置為窗口高度的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);//設置字體
          painter.setPen(QColor(120,120,120));//設置畫筆顏色——灰色
          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);//繪制文字,水平居左垂直居中
    }

    定義滾動延遲函數:

    //設置滾動延遲,多少ms滾動多少像素點pixelSize
    void Widget::setDelay(int ms,int pixelSize)
    {
    
        this->m_ms=ms;
        this->m_pixelSize=pixelSize;
    }

    設置字體相關信息:

    //設置字體相關信息(text:字體內容,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;                  //文本內容
        m_showText = m_text;            //顯示內容
    
        //計算字符大小
        QFontMetrics metrics(font);
        int char_w = metrics.horizontalAdvance(" ");//Qt5.11之后,之前請用width()
        setDelay(50,char_w*speed);//調用setDelay()函數,設置滾動延時
    
        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如何實現字幕滾動效果

    到此,關于“Qt如何實現字幕滾動效果”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    qt
    AI

    两当县| 泰和县| 肥乡县| 宣威市| 法库县| 台州市| 西乌珠穆沁旗| 沁源县| 深水埗区| 得荣县| 沁水县| 呼图壁县| 田阳县| 庆安县| 当雄县| 浦城县| 康马县| 滁州市| 南开区| 普兰县| 门头沟区| 海伦市| 平乐县| 安龙县| 永昌县| 珠海市| 桃江县| 乐山市| 东源县| 葫芦岛市| 金华市| 满洲里市| 郎溪县| 万全县| 崇礼县| 岗巴县| 小金县| 郧西县| 福建省| 甘孜| 驻马店市|