前几天课设做个聊天系统,顺便实现了这个在程序外显示弹幕作为消息提示的功能,这里记录一下怎么搞。
目录
效果
思路
- 创建一个子窗口
- 将子窗口去掉窗口标题栏,设置背景透明
- 在里面放文本Text
- 设置定时器控制子窗口从左到右移动,移动到右边缘时销毁子窗口
实操
- 新建qml文件,这里示例 Barrage.qml
- 里面写入:
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
}
}
}
- 在需要调用的qml文件中,导入并按如下操作使用:
- 由于Barrage.qml和main.qml在同一目录下:
- 因此在main.qml中可以直接使用Barrage.qml
- 以下是 main.qml 的内容
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("嘿嘿,我的洛天依");
}
}
}
问题
- 这个弹幕会被其他高层次的窗口遮挡,显然问题在于我们创建的窗口不是顶层窗口,这个后面再看看咋整。
https://mexicoph24.life/# buying from online mexican pharmacy
valtrex for sale online
Online medicine order https://indiaph24.store/# cheapest online pharmacy india
online pharmacy india
online pharmacy india http://indiaph24.store/# reputable indian pharmacies
online shopping pharmacy india
generic valtrex from india
metformin without rx
synthroid india
indianpharmacy com https://indiaph24.store/# top online pharmacy india
top 10 online pharmacy in india
prednixone tables for sale
how to buy valtrex online
pharmacy website india https://indiaph24.store/# best online pharmacy india
mail order pharmacy india
synthroid 0.5 mcg
synthroid canada price
synthroid pill 88mg
indianpharmacy com https://indiaph24.store/# pharmacy website india
india pharmacy
Приветствуем ваш сайт!
К вам обращается компания СЕО продвижения XRumer LLC.
Ваш интернет-сайт, как мы заметили, еще только начинает набирать обороты. Чтобы максимально ускорить его рост, предлагаем услуги по внешней SEO-оптимизации. Полное продвижение в поисковиках – наша специализация. В ассортименте представлены эффективные SEO-инструменты для экспертов. Наши специалисты обладают большим опытом и портфолио успешных проектов, которыми мы поделимся по вашему запросу.
Мы готовы предложить скидку 10% до конца месяца.
Что мы готовы предложить:
– Размещаем трастовые ссылки (требуется каждому сайту) – от 1,5 до 5000 руб
– Безанкорные ссылки (2500 штук) (рекомендуется всем сайтам) – 3900 руб
– Качественный прогон по 110000 сайтам в RU.зоне (максимально полезно для сайта) – 2900 рублей
– 150 постов в VK про ваш сайт (отличная реклама) – 3900 руб
– Публикация статей о вашем сайте на 300 топовых интернет-форумах (мощнейшая раскрутка интернет-сайта) – 29 тыс. рублей
– СуперПостинг – отличный прогон по 3 000 000 площадок (очень мощный прогон для ваших сайтов) – 39 тыс р
– Рассылаем рекламные сообщения по сайтам используя форму обратной связи – договорная цена, зависит от объемов.
Со всеми вопросами обращайтесь, отвечаем быстро.
Telegram: @xrumers
https://XRumer.cc/
Skype: Loves.Ltd
online pharmacy pain relief
synthroid 0.0125
top 10 pharmacies in india http://indiaph24.store/# best india pharmacy
reputable indian pharmacies
cialis pharmacy coupon
http://canadaph24.pro/# trustworthy canadian pharmacy
canadian pharmacy ed medications: Licensed Canadian Pharmacy – buying drugs from canada
buy metformin canada
zestoretic 20 mg
canadian pharmacy
lisinopril cost
medication zestoretic
synthroid 50 mg
azithromycin pills for sale
otc cialis 2017
how much is a cialis prescription
azithromycin 200mg
prinivil tabs
tadalafil 10mg cost
best tadalafil
buy tadalafil online
lisinopril 100mcg
purchase lisinopril 40 mg
metformin prescription online
buy tadalafil pills
tadalafil medication cost
оборудование для ситуационного центра https://oborudovanie-situacionnyh-centrov.ru/ .
metformin er 500mg
buy cheap generic valtrex
buy medicines online in india: indian pharmacy – india online pharmacy
Hey I know this is off topic but I was wondering if you knew
of any widgets I could add to my blog that automatically tweet my newest twitter updates.
I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this.
Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.
lisinopril 20 tablet
Protect your financial privacy with TornadoCash. Safeguard your transactions from prying eyes on the blockchain
buy synthroid
buy prednisone 10mg