[Qt/qml]程序之外显示的弹幕

/ 27,589评论 / 151938阅读 / 4点赞

前几天课设做个聊天系统,顺便实现了这个在程序外显示弹幕作为消息提示的功能,这里记录一下怎么搞。

效果

思路

实操

import QtQuick 2.3
import QtQuick.Controls 2.5
//窗口
ApplicationWindow  {
    id:root
    property string str: "我的洛天依"  //弹幕文本内容
    width: 300
    height: 40

    flags:  Qt.FramelessWindowHint  //去掉窗口标题栏
    color:"#00000000"   //设置背景透明

    Rectangle {     //使用矩形包裹Text是为了在Text外面可以增加圆角矩形边框效果
        anchors.fill: parent
        border.width: 1     //设置边框
        border.color: "#66ccff"
        color:"#00000000"
        radius: 20          //边框圆角
        clip: true          //超出矩形范围的内容隐藏

        Text {      //弹幕文本
            anchors.fill: parent
            text: str
            font.bold: true
            font.pointSize: 15
            color: "#66ccff"
            style: Text.Outline     //设置文本样式,在字体轮廓加一层styleColor指定的颜色边缘,防止背景导致文本不明显
            styleColor: "#fff"
            horizontalAlignment: Text.AlignHCenter  //居中
            verticalAlignment:   Text.AlignVCenter
            clip: true
        }
    }
}
import QtQuick
import QtQuick.Window 2.3
import QtQuick.Controls 2.5

Window {
    id:mainWin
    width: 700
    height: 500
    visible: true
    title: qsTr("MimicryChat")

    //添加弹幕
    function addBarrage(in_str) {
        var newCom = Qt.createComponent("Barrage.qml");   //创建弹幕窗口
        var newWin = newCom.createObject();
        newWin.x   = 200;
        newWin.y   = Math.random() * 900;   //随机竖直位置
        newWin.str = in_str;   //设置弹幕文本
        newWin.show();         //显示弹幕窗口

        //设置定时控制器
        let timer = Qt.createQmlObject("import QtQuick 2.14; Timer {}", mainWin);
        timer.interval = 20;    //执行间隔时间(单位ms)
        timer.repeat = true;    //重复执行
        timer.triggered.connect(function() {  //执行内容
            if(newWin.x < 1700) {  //如果没到右边缘就移动2个像素点
                newWin.x += 2;
            } else {
                timer.stop();      //到达右边缘,则停止定时控制器,并销毁弹幕
                newWin.close();
            }
        });
        timer.start();   //启动定时器
    }
    Rectangle {   //主窗口背景颜色
        anchors.fill: parent
        color: "#dde8fc"
        radius: 20
    }
    Button {
        width:100
        height: 40
        text:"发送弹幕"
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 10
        //水平居中
        anchors.horizontalCenter: parent.horizontalCenter
        onClicked: {
            addBarrage("嘿嘿,我的洛天依");
        }
    }
}

问题

  1. Michaelsew说道:

    http://mexicoph24.life/# mexico drug stores pharmacies

  2. StevenSen说道:

    buying prescription drugs in mexico online: Online Pharmacies in Mexico – п»їbest mexican online pharmacies

  3. JustinTut说道:

    cheapest online pharmacy india https://indiaph24.store/# reputable indian online pharmacy
    indian pharmacy online

  4. Pedropaite说道:

    mexican online pharmacies prescription drugs: medication from mexico pharmacy – mexican rx online

  5. JustinTut说道:

    best india pharmacy https://indiaph24.store/# indianpharmacy com
    best online pharmacy india

  6. JustinTut说道:

    п»їlegitimate online pharmacies india http://indiaph24.store/# indian pharmacies safe
    cheapest online pharmacy india

  7. JustinTut说道:

    buy medicines online in india https://indiaph24.store/# indian pharmacy paypal
    pharmacy website india

  8. JustinTut说道:

    Online medicine home delivery https://indiaph24.store/# indianpharmacy com
    indian pharmacy

  9. Michaelsew说道:

    https://mexicoph24.life/# buying prescription drugs in mexico

  10. JustinTut说道:

    п»їlegitimate online pharmacies india http://indiaph24.store/# Online medicine home delivery
    Online medicine home delivery

  11. JustinTut说道:

    buy medicines online in india http://indiaph24.store/# indian pharmacy paypal
    indianpharmacy com

  12. sandyterrace.com说道:

    zanetvize.com
    그런데 그들이 산길을 돌자 갑자기 눈이 번쩍 떠졌다.

  13. Search TV说道:

    Hello, its pleasant piece of writing about media print, we all know media is a wonderful source of
    data.

  14. sandyterrace.com说道:

    buysteriodsonline.com
    병사들은 Zhu Zaimo가 무자비한 것을 보았을 때 Xu Pengju는 격렬하게 울부 짖었습니다.

  15. StevenSen说道:

    medicine in mexico pharmacies: mexican pharmacy – buying prescription drugs in mexico

  16. JustinTut说道:

    Online medicine order http://indiaph24.store/# indianpharmacy com
    pharmacy website india

  17. Приветствуем вас, друзья!

    Компания XRumer LLC предлагает профессиональные услуги по СЕО продвижению.

    Ваш сайт, как можно заметить, еще только начинает набирать обороты. Для того, чтобы по максимуму ускорить процесс его роста, можем предложить услуги по внешней СЕО-оптимизации. Продвижение в поисковых системах – наша работа. В ассортименте имеются надежные и эффективные СЕО-инструменты для специалистов. У нас большой опыт в данном направлении и огромное портфолио успешных проектов – предоставим по вашему запросу.

    Сейчас можем предложить скидку на самые актуальные услуги – 10%.

    Услуги:

    – Трастовые ссылки (нужно всем сайтам) – цена 1500-5000 р

    – Размещаем 2500 жирных безанкорных ссылок (полезно любым сайтам) – 3.900 рублей

    – Прогон на 110000 сайтов в зоне RU (очень полезно для сайтов) – 2900 руб

    – 150 постов в VK про ваш сайт (поможет в рекламе) – 3900 руб

    – Размещение статей про ваш сайт на 300 интернет-форумах (мощная раскрутка портала) – 29000 рублей

    – СуперПостинг – это прогон на 3 миллиона ресурсов (мощный прогон для вашего сайта) – 39 900 р

    – Рассылаем сообщения по сайтам с использованием обратной связи – договорная цена, будет зависеть от объема.

    Если появятся вопросы, в любое время обращайтесь. Всегда поможем.

    Telgrm: @exrumer
    https://XRumer.cc/
    Skype: Loves.Ltd

  18. JustinTut说道:

    online shopping pharmacy india https://indiaph24.store/# indian pharmacies safe
    indian pharmacy

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注