<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yu_20501253的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yu_20501253</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yu_20501253]]></copyright><item><title><![CDATA[基于Qt的UDP主从服务器设计与实现]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/148811448</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/148811448</guid><author>yu_20501253</author><pubDate>Sat, 21 Jun 2025 16:06:32 +0800</pubDate><description><![CDATA[本文介绍了一个基于Qt框架的UDP主从服务器系统，主要应用于分布式能源管理系统。系统采用优先级自动选举机制实现主机选择，具备故障检测与秒级转移能力，通过UDP广播维持设备间状态同步。关键功能包括：1)基于优先级的动态主机选举算法；2)心跳检测与设备状态维护机制；3)高效UDP通信协议实现全网数据同步。系统优势体现在高可靠性（无单点故障）、强一致性（全局状态视图）和灵活扩展性（可配置优先级），尤其适合资源受限环境下的分布式协作场景。]]></description><category></category></item><item><title><![CDATA[QML输入框自动补全]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/122625018</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/122625018</guid><author>yu_20501253</author><pubDate>Fri, 21 Jan 2022 16:55:36 +0800</pubDate><description><![CDATA[TextFieldWithCompleter {
    id: _textField
    anchors.top:parent.top
    anchors.left:parent.left
    anchors.right:parent.right
    height:30

    completerModel: SuggestionsModel
    popupPadding: 1

    onTextModified: {
        console.log("modified.]]></description><category></category></item><item><title><![CDATA[qt自定义软件安装包]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/115868849</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/115868849</guid><author>yu_20501253</author><pubDate>Mon, 19 Apr 2021 17:11:47 +0800</pubDate><description><![CDATA[将程序压缩为zip格式后添加到资源文件，安装时使用quazip从资源文件解压到指定目录，并且将解压放在子线程，避免UI卡主。在做安装包时要使用静态编译，要不然安装包还是需要一大堆dll文件。目录结构如下：



主要代码：


#ifndef UNCOMPRESSTHREAD_H
#define UNCOMPRESSTHREAD_H

#include &lt;QObject&gt;
#include &lt;QThread&gt;

class UncompressThread : public QO..]]></description><category></category></item><item><title><![CDATA[解决使用QQuickWidget加载qml文件报重新编译的警告]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/111860096</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/111860096</guid><author>yu_20501253</author><pubDate>Mon, 28 Dec 2020 13:49:34 +0800</pubDate><description><![CDATA[代码是这样写的


   ui-&gt;quickWidget-&gt;setResizeMode(QQuickWidget::SizeRootObjectToView);
    QUrl source("qrc:/qml/qml/Dimensional3RoboticArm.qml");
    ui-&gt;quickWidget-&gt;setSource(source);

没有什么问题，但是换到另一台电脑上编译运行的时候出现一个警告：qrc:/qml/qml/Dimensional3Roboti]]></description><category></category></item><item><title><![CDATA[Qt高精度定时器]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/111312282</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/111312282</guid><author>yu_20501253</author><pubDate>Thu, 17 Dec 2020 12:19:02 +0800</pubDate><description><![CDATA[一般而言,Qt有两种使用定时器的方式, QObject和QTimer,对于第一种需要重写timerEvent事件来实现,第二种需要声明一个QTimer的对象或指针,用QTimer::timeout()信号连接槽函数,设置定时器类型mTimer.setTimerType(Qt::PreciseTimer);






第一种即使高精度的定时器,保持毫秒级别;第二种粗计时器尽量将精度保持在所需间隔的5%以内;第三种非常粗糙的计时器只能保持完整的秒精度.



#ifndef BACKENDPROIXY_H
.]]></description><category></category></item><item><title><![CDATA[QML Canvas 清除画布,重新绘制]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/111216123</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/111216123</guid><author>yu_20501253</author><pubDate>Tue, 15 Dec 2020 15:08:38 +0800</pubDate><description><![CDATA[function clearCanvas() {
    var ctx = runningWinCanvas.getContext('2d');
    ctx.clearRect(0,0,runningWinCanvas.width,runningWinCanvas.height);
    runningWinCanvas.requestPaint();
}


]]></description><category></category></item><item><title><![CDATA[qml 3d实现鼠标左键控制摄像机旋转]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/108997001</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/108997001</guid><author>yu_20501253</author><pubDate>Sat, 10 Oct 2020 15:08:14 +0800</pubDate><description><![CDATA[在qml 3d开发中,默认的是鼠标右键控制摄像机旋转,这不太符合操作习惯.要实现鼠标左键控制摄像机旋转就要重写鼠标事MouseArea,现将代码整理如下:


        MouseArea{
            id:mouseId
            width: 300
            height: 200
            anchors.top:  parent.top
            anchors.topMargin: 0
            ancho]]></description><category></category></item><item><title><![CDATA[QML ListView列表]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/108996247</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/108996247</guid><author>yu_20501253</author><pubDate>Sat, 10 Oct 2020 14:34:15 +0800</pubDate><description><![CDATA[import QtQuick 2.0
import QtQuick.Controls 1.4
import io.qt.DataBaseModel 1.0
import QtQuick.Controls.Styles 1.4
Rectangle {
    id:root

    property real sqlClawLeftRight: 0.0
    property real sqlClawOpenClose: 5.8
    property real sqlWristClawRota: 0.]]></description><category></category></item><item><title><![CDATA[Qt C++设置获取Windows音量,麦克风,静音,恢复静音]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/108235313</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/108235313</guid><author>yu_20501253</author><pubDate>Wed, 26 Aug 2020 10:54:51 +0800</pubDate><description><![CDATA[​

#pragma once

#include &lt;windows.h&gt;
#define MAX_VOL 100
class MixerWrap
{
public:
	MixerWrap(void){};
public:
	virtual ~MixerWrap(void){};

	static void MicphoneBoost(bool bIsBoost);
	
	static void MicphoneMut(bool bIsMut);
	static void Stere...]]></description><category></category></item><item><title><![CDATA[Qt武林秘籍]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/108218373</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/108218373</guid><author>yu_20501253</author><pubDate>Tue, 25 Aug 2020 11:44:11 +0800</pubDate><description><![CDATA[1：当编译发现大量错误的时候，从第一个看起，一个一个的解决，不要急着去看下一个错误，往往后面的错误都是由于前面的错误引起的，第一个解决后很可能都解决了。
2：定时器是个好东西，学会好使用它，有时候用QTimer::singleShot可以解决意想不到的问题。
3：打开creator，在构建套件的环境中增加MAKEFLAGS=-j8，可以不用每次设置多线程编译。珍爱时间和生命。
4：如果你想顺利用QtCreator部署安卓程序，首先你要在AndroidStudio 里面配置成功，把坑全部趟平。
5：很多时候.]]></description><category></category></item><item><title><![CDATA[总结了一些Qt黑科技]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/108218093</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/108218093</guid><author>yu_20501253</author><pubDate>Tue, 25 Aug 2020 11:32:05 +0800</pubDate><description><![CDATA[1：编译前复制文件
src_file = $$PWD/py.db
dst_file = $$OUT_PWD/bin/py.db
win32 {
src_file ~= s,/,\\,g
dst_file ~= s,/,\\,g
#system(copy /y $$src_file $$dst_file)
}
unix {
system(cp -r -f $$src_file $$dst_file)
}
2：编译完成后复制文件
src_f...]]></description><category></category></item><item><title><![CDATA[QML 3D 加载多模型 无边框,背景透明,机械臂联动]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/106997793</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/106997793</guid><author>yu_20501253</author><pubDate>Sun, 28 Jun 2020 14:14:04 +0800</pubDate><description><![CDATA[main.cpp


#include &lt;Qt3DQuickExtras/qt3dquickwindow.h&gt;
#include &lt;QGuiApplication&gt;
#include &lt;QQuickView&gt;
#include &lt;QQmlEngine&gt;
#include &lt;QQmlApplicationEngine&gt;
#include &lt;QQmlContext&gt;
#include &lt;QQuickItem&gt;

...]]></description><category></category></item><item><title><![CDATA[Qt跨平台文字转语音]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/106997426</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/106997426</guid><author>yu_20501253</author><pubDate>Sun, 28 Jun 2020 13:54:04 +0800</pubDate><description><![CDATA[pro加上 QT += texttospeech

头文件:


#ifndef TEXTTOSPEECH_H
#define TEXTTOSPEECH_H

#include &lt;QObject&gt;
#include &lt;QTextToSpeech&gt;

class TextToSpeech : public QObject
{
    Q_OBJECT
public:
    explicit TextToSpeech(QObject *parent = nullptr);

signa]]></description><category></category></item><item><title><![CDATA[Qt 蓝牙通讯]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/106997320</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/106997320</guid><author>yu_20501253</author><pubDate>Sun, 28 Jun 2020 13:49:14 +0800</pubDate><description><![CDATA[pro文件加上QT += bluetooth

头文件:


#ifndef BLUETOOTHPROXY_H
#define BLUETOOTHPROXY_H

#include &lt;QObject&gt;

#include &lt;QtBluetooth/qbluetoothlocaldevice.h&gt;
#include &lt;qbluetoothaddress.h&gt;
#include &lt;qbluetoothdevicediscoveryagent.h&gt;
#include]]></description><category></category></item><item><title><![CDATA[QML判断操作系统，获取可执行文件路径]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/106560059</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/106560059</guid><author>yu_20501253</author><pubDate>Thu, 04 Jun 2020 22:48:27 +0800</pubDate><description><![CDATA[Component.onCompleted: {
        var exePath = Qt.application.arguments[0];
        if (Qt.platform.os === "windows" || Qt.platform.os==="winrt") {
            var appPath = exePath.substring(0,exePath.lastIndexOf('\\'))
            console.log("=========.]]></description><category></category></item><item><title><![CDATA[QML TableView QSqlTableModel加载数据库]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/105857189</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/105857189</guid><author>yu_20501253</author><pubDate>Thu, 30 Apr 2020 11:08:57 +0800</pubDate><description><![CDATA[C++部分:


#ifndef DATABASEMODEL_H
#define DATABASEMODEL_H

#include &lt;QSqlTableModel&gt;

class DataBaseModel : public QSqlTableModel
{
    Q_OBJECT
public:
    explicit DataBaseModel(QSqlTableModel...]]></description><category></category></item><item><title><![CDATA[Qt自定义安装包]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/103612172</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/103612172</guid><author>yu_20501253</author><pubDate>Thu, 19 Dec 2019 12:10:40 +0800</pubDate><description><![CDATA[能够将放在QT的资源文件中,在解压本地 .或者先复制到本地再解压,支持多线程.

核心代码:


void UncompressThread::uncompressFile(QString file,QString path)
{
    QString m_strAppPath =path;
    //QString strInFileName /*= "D:\\QtCore\\Uncom...]]></description><category></category></item><item><title><![CDATA[Qt程序获取管理员权限]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/103084903</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/103084903</guid><author>yu_20501253</author><pubDate>Fri, 15 Nov 2019 14:34:30 +0800</pubDate><description><![CDATA[QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'"

上面那句死活都不得行,提示路径或权限错误,删掉后面部分就可以了
QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'"




...]]></description><category></category></item><item><title><![CDATA[C++设置windows系统音量,静音,恢复静音,获取音量]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/103068278</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/103068278</guid><author>yu_20501253</author><pubDate>Thu, 14 Nov 2019 15:30:26 +0800</pubDate><description><![CDATA[/**
 * @brief setVolum
 * 设置系统音量
 * @param volume
 * -2 恢复静音
 * -1 静音
 * 0~100:音量比例
 * @return
 */
bool setVolum(int level)
{
    HRESULT hr;
    IMMDeviceEnumerator* pDeviceEnumerator=0;
    IMMDevi...]]></description><category></category></item><item><title><![CDATA[QML窗口最大化、最小化、无边框]]></title><link>https://blog.youkuaiyun.com/yu_20501253/article/details/97025915</link><guid>https://blog.youkuaiyun.com/yu_20501253/article/details/97025915</guid><author>yu_20501253</author><pubDate>Tue, 23 Jul 2019 19:42:23 +0800</pubDate><description><![CDATA[import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    visible: true
    visibility:"Maximized"          //最大化
    //visibility:"Minimized"        //最小化

 ...]]></description><category></category></item></channel></rss>