如何用Qt-Creator连接PostgreSQL
用MSVC2019-64bit对SchemeEdit进行Release
在D:\Lixianen\build-schemeedit-Desktop_Qt_6_2_4_MSVC2019_64bit-Release\config\config.ini中修改
UserName为postgres,DataBaseName为创建的数据库的名字
添加环境变量中的用户变量,地址为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与buttonList、operationList绑定,那为什么不能在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元素中
RowLayout是Qt 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::map,QVariantMap将一组键值对封装在一个对象中,并允许您根据键访问值。每个键都必须是一个QString类型,而每个值可以是任何Qt支持的类型,例如QString,int,bool等等。
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相互转换。QVariantMap是Qt中的一个通用容器类,可以存储各种类型的数据。您可以使用QJsonObject的toVariantMap()方法将其转换为QVariantMap,使用QVariantMap的fromJsonObject()方法将其转换回QJsonObject。
此外,您可以使用QJsonDocument将QJsonObject对象转换为基于文本的JSON格式或将JSON格式的文本转换为QJsonObject对象。这在读取和写入JSON文件时非常有用。
总之,QJsonObject是一个功能强大的类,用于在QML中处理JSON数据。它可以让您方便地创建、修改和读取JSON格式数据,并与其他Qt类(如QVariantMap和QJsonDocument)进行交互。
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:封装JSON值 int,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.0到1.0之间,其中0.0表示完全透明,1.0表示完全不透明。
opacity属性在QML中的使用有以下几种情况:
控制元素的透明度:可以将opacity属性设置为0.0,让元素完全透明,或将其设置为1.0,让元素完全不透明。可以通过设置不同的opacity值来实现不同的透明度效果。
实现动画效果:通过逐渐改变opacity值来实现元素的渐隐渐显效果,从而实现动画效果。
遮罩效果:可以将opacity属性与遮罩图片一起使用,实现遮罩效果。设置元素的opacity值为0.0,在其上叠加一个透明度为1.0的遮罩图片,即可实现遮罩效果。
组合效果:可以将opacity属性与其他属性(如scale、rotation等)一起使用,实现各种组合效果,如淡入淡出、渐变等。