试用期QML心得

如何用Qt-Creator连接PostgreSQL

  1. MSVC2019-64bitSchemeEdit进行Release

  1. D:\Lixianen\build-schemeedit-Desktop_Qt_6_2_4_MSVC2019_64bit-Release\config\config.ini中修改

UserName为postgres,DataBaseName为创建的数据库的名字

  1. 添加环境变量中的用户变量,地址为D:\PostgreSQL\15\bin,之后重新启动计算机,完

近期任务:阅读QML代码!!!

QML中同级的两个row会打印在同一行,若想打印两行,可以在Column里面嵌套两个同级的Row。

Flickable 项将其子项放置在可以拖动和轻弹的表面上,从而使得子项上的视图滚动:

boundsBehavior: Flickable.StopAtBounds 是 QML 中 Flickable 组件的一个属性,它用于控制当用户滑动 Flickable 内容时,当内容达到滑动边缘时会发生什么。

具体地说,boundsBehavior 属性有以下几个可能的取值:

  • Flickable.StopAtBounds(默认值):当用户滑动内容时,当内容达到 Flickable 边缘时,滑动停止,不能再继续滑动。

  • Flickable.DragOverBounds:当用户滑动内容时,当内容达到 Flickable 边缘时,用户可以继续滑动,但内容会超出 Flickable 边缘并显示在 Flickable 外部。

  • Flickable.Contain:当用户滑动内容时,当内容达到 Flickable 边缘时,用户可以继续滑动,但内容不会超出 Flickable 边缘,并且边缘处可能会出现空白区域。

因此,boundsBehavior: Flickable.StopAtBounds 表示当用户滑动 Flickable 内容时,当内容达到 Flickable 边缘时,滑动会停止,不能再继续滑动

关于Flickable的详细介绍在(30条消息) QML类型:Flickable_友善啊,朋友的博客-CSDN博客_qml flickable

一个Connections对象创建一个了一个QML信号的连接。在QML中,我们连接信号通常是用使用"on<Signal>"来处理的,一般放在原对象的同级别

CheckBox的例子

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12
 
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
 
    ColumnLayout {
          x:20
          y:20
 
          CheckBox {
              id:ch1
              checked: true
              text: qsTr("First")
          }
          CheckBox {
              id:ch2
              text: qsTr("Second")
          }
          CheckBox {
              id:ch3
              checked: true
              text: qsTr("Third")
          }
 
          Button{
              text: "获取CheckBox状态"
              onClicked: {
                  console.log(ch1.checked)
                  console.log(ch2.checked)
                  console.log(ch3.checked)
              }
          }
      }
}

关于CusTableView中点击事件和信号的理解:当#171定义了MouseArea,当点击事件发生时,调用在它内部定义的函数mockClick()mockClick()发出信号closeAllItemCheck()并把delegateRect.checked设为true,当Connections中的onCloseAllItemCheck()收到信号后,被激活且将delegateRect.checked设为false

为什么不能把CusTableView中的_buttonList_operationList删除,转而在ui/Process/ProcessTableView.qml中定义,既然是在ProcessTableView.qml中才将_buttonList_operationList与buttonListoperationList绑定,那为什么不能在ProcessTableView.qml中定义,为什么会报错?

MouseArea {
    anchors.fill: parent
    onClicked: {
        parent.forceActiveFocus()
    }
}

/*这是一个使用QML中MouseArea组件的例子。这个组件会检测鼠标在其上的操作,并可以触发一些指定的行为。
在这个例子中,MouseArea组件的anchors.fill属性被设置为其父组件的大小,即该组件占据了整个父组件的空间。
当用户在该组件上单击鼠标时,onClicked事件会被触发,执行其中的指令。在这个例子中,指令是调用该组件的父组件的forceActiveFocus()方法,强制让其父组件获得焦点。

由于该方法会自动将焦点传递给祖先FocusScope对象,因此整个组件层级中,具有FocusScope对象的组件都将获得焦点。这通常用于在用户与界面交互时,确保所需的组件具有焦点,以便正确处理用户的输入和操作。*/

当多个 RadioButton CheckButton 控件具有相同的 autoExclusive 属性时,它们将被视为一个组,而且只有一个控件可以被选中。当一个控件被选中时,其它控件将自动取消选中。

例如,下面的代码片段定义了两个 RadioButton 控件,它们具有相同的 autoExclusive 值,因此它们将被视为同一组。

import QtQuick 2.0
import QtQuick.Controls 2.0

RadioButton {
    id: radio1
    text: "Radio Button 1"
    autoExclusive: true
}

RadioButton {
    id: radio2
    text: "Radio Button 2"
    autoExclusive: true
}

在上面的代码片段中,只能选中其中一个 RadioButton 控件。如果选中了 radio1,那么 radio2 将自动取消选中,反之亦然。这种机制可以用于实现类似选项卡或单选列表等用户界面。

Loader,通过使用Loader,您可以将某个组件或视图在需要时才加载到应用程序中,从而提高应用程序的性能和启动速度。Loader元素用于动态加载QML组件或JavaScript脚本,并将其作为其子元素添加到Loader元素中

RowLayoutQt Quick中的一种布局方式,用于在水平方向上排列多个子元素。在QML中,可以使用RowLayout来快速构建一些水平方向上的布局,例如工具栏、按钮组等。

使用RowLayout可以方便地指定子元素的位置和间距,可以使用Layout.alignment属性来指定子元素的水平对齐方式,可以使用Layout.spacing属性来指定子元素之间的间距。此外,还可以使用Layout.fillWidth属性来指定子元素是否应该填满可用空间。

void RegisterToQml::DataBase() {
  // 数据库连接
  qmlRegisterType<DataConnect>("DataBase", 1, 0, "DataConnectObject");
}

这段代码是在一个名为 "RegisterToQml" 的类中定义的一个名为 "DataBase" 的函数,它的作用是将一个名为 "DataConnect" 的 C++ 类注册到 Qt Quick 中,以便可以在 QML 代码中使用。

具体地说,"qmlRegisterType" 是一个 Qt Quick 函数,用于将 C++ 类型注册到 QML 中。在这个例子中,它将 "DataConnect" 类型注册到 "DataBase" 模块中,并命名为 "DataConnectObject",以便在 QML 中使用。这个函数的第一个参数是要注册的类型的名称,第二个参数是主版本号,第三个参数是次版本号,第四个参数是在 QML 中使用的类型名称。

qmlRegisterType<MqttLogic>("Backend", 1, 0, "MqttLogicObject");

通过执行这个代码,你可以在 QML 中使用 MqttLogicObject 组件,来访问 C++ 中的 MqttLogic 类的功能和数据。在 QML 中,你可以像使用其他内置的 Qt Quick 组件一样使用 MqttLogicObject 组件,例如创建其实例并设置其属性,以及处理其信号等。Backend 是在这个函数中指定的命名空间,用于将要注册的类型归类到特定的命名空间下。这个参数是可选的,如果不需要将类型归类到特定的命名空间下,则可以将其设置为空字符串。

QVariantMap

C++中,QVariantMap是一个Qt框架中的类,用于存储键值对。类似于C++中的std::mapQVariantMap将一组键值对封装在一个对象中,并允许您根据键访问值。每个键都必须是一个QString类型,而每个值可以是任何Qt支持的类型,例如QStringintbool等等。

QVariantMap MqttLogic::startRun(QVariantList data, MqttLogic::MqttType type) {    //返回类型为QVariantMap
  if (!receiveClient->m_connectedStatus)
    return GeneralUtils::returnInfo(false, "接受信息地址没有连接");

  // 判断连接状态
  if (!realClient->m_connectedStatus) {
    return GeneralUtils::returnInfo(true, "服务器没有连接");
  }

这段代码是一个C++MqttLogic的方法startRun的实现。

该方法有两个参数,第一个参数是一个QVariantList类型的数据列表,第二个参数是一个枚举类型MqttType

该方法的作用是启动Mqtt连接并开始执行逻辑,返回一个QVariantMap类型的结果。

在方法中,首先检查接收客户端(receiveClient)的连接状态,如果没有连接,方法将返回一个包含错误信息的QVariantMap类型的结果。

接着判断实际客户端(realClient)的连接状态,如果没有连接,方法将返回一个包含提示信息的QVariantMap类型的结果。

可以看出,该方法的目的是确保接收客户端和实际客户端都连接成功后,开始执行Mqtt逻辑

QJsonObject

QML中,QJsonObject是一种用于处理JSON(JavaScript Object Notation)数据的类。JSON是一种轻量级数据交换格式,具有易读性、易解析性和易编写性的特点。QJsonObject类允许您以编程方式创建、修改和读取JSON格式数据。

QJsonObject是一个键值对的列表,其中每个键都是一个唯一的字符串,每个值都由QJsonValue表示。您可以通过使用insert()方法向QJsonObject添加新键值对,使用value()方法获取键对应的值,使用remove()方法删除特定的键值对。

QJsonObject类是一个隐式共享类。这意味着它会自动共享其数据,只要它没有被修改。这在处理大量数据时非常有用,因为它可以提高效率并减少内存使用。

QJsonObject还可以与QVariantMap相互转换。QVariantMapQt中的一个通用容器类,可以存储各种类型的数据。您可以使用QJsonObjecttoVariantMap()方法将其转换为QVariantMap,使用QVariantMapfromJsonObject()方法将其转换回QJsonObject

此外,您可以使用QJsonDocumentQJsonObject对象转换为基于文本的JSON格式或将JSON格式的文本转换为QJsonObject对象。这在读取和写入JSON文件时非常有用。

总之,QJsonObject是一个功能强大的类,用于在QML中处理JSON数据。它可以让您方便地创建、修改和读取JSON格式数据,并与其他Qt类(如QVariantMapQJsonDocument)进行交互。

QVariantMap MqttLogic::startRun(QVariantList data, MqttLogic::MqttType type) {        //返回类型为QVariantMap
  if (!receiveClient->m_connectedStatus)
    return GeneralUtils::returnInfo(false, "接受信息地址没有连接"); 

  // 判断连接状态
  if (!realClient->m_connectedStatus) {
    return GeneralUtils::returnInfo(true, "服务器没有连接");
  }

MqttLogic是一个自定义的类,而startRun是它的成员函数,该函数的返回类型是QVariantMap。如果receiveClient对象的m_connectedStatus成员变量的值为false,则返回“接受信息地址没有连接”,若realClient对象的m_connectedStatus成员变量的值为false,则返回"服务器没有连接",这里使用了一个GeneralUtils类的静态函数returnInfo,该函数用于返回一个QVariantMap类型的数据结构,其中包含了一个布尔类型的status和一个字符串类型的message。返回的status表示连接状态是否正确,message表示错误信息的描述。

sourceComponent用法

QML中的sourceComponent是一个用于动态创建组件的元素,它可以将一个已存在的组件作为模板,并在运行时根据提供的数据或属性动态生成新的组件实例。

sourceComponent通常与Qt的模型视图编程框架(QAbstractItemModel)一起使用,可以在运行时基于模型数据动态生成视图中的子项,实现高效灵活的视图布局和数据绑定。

Qt Creator中解析JSON数据:https://blog.csdn.net/rong11417/article/details/104252927

b站详细视频讲解:https://b23.tv/q5rJAYX

QJsonDocument:读写JSON文件

QJsonObject:封装JSON对象 {....}

QJsonArray:封装JSON数组 [......]

QJsonValue:封装JSONint,float,double

QJsonParseError:报告JSON处理过程中出现的错误

如果在一个qml文件中以创建对象的方式调用另一个qml文件,而且会往里面传送参数,那么第二个qml文件中的属性需要加上property,表示把该属性开放为公共属性。

C++中,foreach循环通常被称为范围for循环(range-based for loop),可以用来遍历数组、容器和其他序列化数据结构中的元素。

Q_LIKELY() 是一个编译器宏,通常用于表达条件语句中的分支概率。它可以帮助编译器更好地优化代码,使得概率更高的分支更容易被预测和执行。

PropertyChanges元素,用于更改指定目标对象的属性。

//将control.contentItem的opacity属性设为0.75
PropertyChanges { target: control.contentItem; opacity: 0.75 } 

QML中,opacity是一个控制元素透明度的属性。它的值在0.01.0之间,其中0.0表示完全透明,1.0表示完全不透明。

opacity属性在QML中的使用有以下几种情况:

  1. 控制元素的透明度:可以将opacity属性设置为0.0,让元素完全透明,或将其设置为1.0,让元素完全不透明。可以通过设置不同的opacity值来实现不同的透明度效果。

  1. 实现动画效果:通过逐渐改变opacity值来实现元素的渐隐渐显效果,从而实现动画效果。

  1. 遮罩效果:可以将opacity属性与遮罩图片一起使用,实现遮罩效果。设置元素的opacity值为0.0,在其上叠加一个透明度为1.0的遮罩图片,即可实现遮罩效果。

  1. 组合效果:可以将opacity属性与其他属性(如scalerotation等)一起使用,实现各种组合效果,如淡入淡出、渐变等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值