QT5笔记

作者: 你猜_19ca | 来源:发表于2018-08-07 14:05 被阅读0次

QT5.0乱码问题

不能用QTextCodec解决乱码问题,需要用QStringLiteral("我是中文")

QML笔记

QML加载自定义控件提示"xxx is not type"

原因: 路径找不到
在main.cpp里把加载主窗口

engine.load(QUrl(QStringLiteral("qrc:qml/main.qml")));

修改成

engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));

神奇的事情发生了,这样就可以直接加载qml下面的其他xxx.qml文件了

码流图片实时刷新至QML界面

  • 继承QQuickImageProvider类,并实现requestImage接口

    构造函数调用父类构造函数,设为至Image

    AEScreenImageProvider::AEScreenImageProvider():QQuickImageProvider(QQuickImageProvider::Image){}
    

    实现requestImage接口

    QImage AEScreenImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
    {
        return this->m_img;
    }
    

    m_img是待传到QML界面的图片,该图片由码流转QImage

    传入的参数id 是指image://provider/id里的id,可以自定义值

  • QML文件按如下编写:

    Image {
        id: screenImg
        anchors.centerIn: parent
        width: 1280
        height: 720
        sourceSize.height: 720
        sourceSize.width: 1280
        cache: false
    }
    
    Connections {
        target: aeclient
        onCallQmlRefeshImg: {
            screenImg.source=""
            screenImg.source="image://aecreen"
        }
    }
    

    aeclient是后台解析码流生成QImage类,每解析一帧,发送一个callQmlRefeshImg信号, QML通过onCallQmlRefeshImg接收信号刷新页面

    emit callQmlRefeshImg(); //告诉qml要刷新图片
    

    Image有缓存机制, 通过设置cache为false和screenImg.source="" 进行清空缓存,否则不会刷新下一张图片, cache默认是true

  • 在main里按如下编写:

    AEClient *pClient = new AEClient();
    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("aeclient", pClient);
    engine.addImageProvider(QLatin1String("aecreen"), pClient->imgProvider());
    

    pClient注册到QML的根节点,这样在界面就可以通过aeclient别名进行调用

    aecreen注册到QML里,通过image://aecreen方式调用AEScreenImageProvider

配置使用Material风格界面

  • 方法一:

    在main.cpp里添加如下代码

    if (qgetenv("QT_LABS_CONTROLS_STYLE").isEmpty()){
        qputenv("QT_LABS_CONTROLS_STYLE", "material");
    }
    
  • 方法二:

    在项目根路径创建文件qtquickcontrols2.conf,并把如下内容写到文件:

    ; This file can be edited to change the style of the application
    ; Read "Qt Quick Controls 2 Configuration File" for details:
    ; http://doc.qt.io/qt-5/qtquickcontrols2-configuration.html
    
    [Controls]
    Style=Material
    
    [Material]
    Theme=Dark
    ;Accent=BlueGrey
    ;Primary=BlueGray
    ;Foreground=Brown
    ;Background=Grey
    

    把该文件添加到qrc资源文件里

    在main.cpp里添加如下代码:

    engine.addImportPath("qrc:qtquickcontrols2.conf");
    

Rectangle自适应Layout

  • 当Layout包含了Rectangle时,需要Rect随Layout变化而变化,按如下设计:

    Layout{
      Rectangle {
        Layout.fillWidth: true;
        Layout.fillHeight: true;
      }
    }
    

QT发布依赖dll

​ Qt 提供了打包工具windeployqt, 利用该工具可以很方便的解决qt的依赖问题

​ qt源码编译release后,生成exe文件,找到生成的exe文件(以下以test.exe作为例子),将exe文件拷贝到其他地方。例如: D:/test

​ 通过cd命令道test.exe存放的地方,并输入下面的命令:

windeployqt -qmldir "源码路径" test.exe --release

命令执行完后,在D:/test下将生成qt的依赖文件。 如果你的源码使用了三方库或者生成了动态链接库,那么需要手动将需要的dll文件复制到目录下,实际

​ 运行试试,是不是可以正常运行。

解决遮罩还能点击遮罩层下面控件问题

​ 遮罩层需要处理鼠标点击事件,使不往下再发送事件信号

Rectangle {
   id: progress
    anchors.fill: parent
    color: "#00000000"
    z: 99
    visible: false
    Rectangle {
        anchors.fill: parent
        opacity: 0.5
        color: "white"
    }

    Column {
        anchors.fill: parent
        //anchors.centerIn: parent
        spacing: 20
        Text {
            text: "正在计算目录: E:/a/b/..."
            color: "white"
            font.pixelSize: 20
            anchors.centerIn: parent
        }
        ProgressBar {
            indeterminate: true
            focusPolicy: Qt.NoFocus
            anchors.centerIn: parent
        }
    }
    MouseArea{
        anchors.fill: parent;
        onPressed:{
             mouse.accepted = true
        }
        drag.target: window  // root可拖动
    }
}

相关文章

  • 用 Qt 5 中实现多国语言支持

    Qt5 实现多国语言 引言 目的:自用/笔记 时间:2018-02-13 01:13 平台: Windows 7 ...

  • 程序打包教程

    QT5程序打包问题 问题描述:为了方便不同电脑之间QT程序的移植,简单介绍QT5打包方式打包工具:QT5自带的wi...

  • QT5笔记

    QT5.0乱码问题 不能用QTextCodec解决乱码问题,需要用QStringLiteral("我是中文") Q...

  • Qt5 安装

    Windows 1. 安装Qt5 点击进入Qt官网下载Qt5,这里我下载的是最新版的Qt5.11,windows平...

  • 关于 Qt 5,你所需要了解的基础知识

    本课程由渐入深逐步掌握使用 Qt5 进行界面程序的开发的相关技术,内容从了解 Qt5 界面程序开发所需的界面设计、...

  • QT5编译QT4项目

    背景 qt5版本为5.14.1在qt5中直接编译qt4项目会报错找不到QApplication等错误,根据网上超找...

  • Install PyQt5

    1 install Qt5 download the install file from http://downl...

  • win10下安装QT5出错的解决方法

    开始qt5学习之旅前在官网下载了qt5安装文件进行安装,默认选择了全部安装,最后始终都出现安装错误;错误内容大致是...

  • Ubuntu Qt4 Qt5 同时安装的切换

    一般情况下,ubuntu16.04可能默认qt4,但随着qt5更新,部分程序要求qt5的支持,卸载qt4再安装qt...

  • CentOS8安装Geant4笔记(三):Geant4介绍、编译

    前言 上一篇,安装了Qt5环境。 本篇在服务器CentOs8.2上安装geant4软件,geant4使用Qt5来显...

网友评论

    本文标题:QT5笔记

    本文链接:https://www.haomeiwen.com/subject/jmaovftx.html