📂
Qt
  • 【Qt Quick 编程指南】
  • 第一篇 基本应用篇
    • 第1章 Qt Creator简介
      • 1.1 注意事项说明
      • 1.2 Qt Creator 是什么
      • 1.2 IDE集成开发环境准备
      • 1.3 Qt Creator 环境介绍
      • 1.4 Qt工具简介
      • 1.5 Git的使用
    • 第2章 Qt Quick
      • 2.1 Qt Quick 是什么
      • 2.2 Qt Quick 能做什么
      • 2.3 QML支持的平台
      • 2.3 第一个Qt Quick程序
    • 第3章 Hello World
      • 2.1 编写Hello World 程序
      • 2.2 程序的运行与发布
      • 2.3 Hello World程序源码与编译过程详解
      • 2.4 项目模式和项目文件介绍
    • 第4章 窗口部件
      • 3.1 基础窗口部件QWidget
      • 3.2 对话框QDialog
      • 3.3 其他窗口部件
    • 第5章 布局管理
      • 4.1 布局管理系统
      • 4.2 设置伙伴
      • 4.3 设置Tab键顺序
      • 4.4 Qt Creator中的定位器
      • 4.5 案例-登录窗口布局
    • 第6章 应用程序主窗口
      • 5.1 主窗口框架
      • 5.2 富文本处理
      • 5.3 拖放操作
      • 5.4 打印文档
    • 第7章 事件系统
      • 6.1 Qt中的事件
      • 6.2 鼠标事件和滚轮事件
      • 6.4 定时器事件与随机数
      • 6.5 事件过滤器与事件的发送
    • 第8章 Qt对象模型与容器类
      • 7.1 对象模型
      • 7.2 容器类
      • 7.1 对象模型
      • 7.3 正则表达式
      • 7.2 容器类
      • 7.3 正则表达式
    • 第9章 界面外观
      • 8.1 Qt风格
      • 8.2 Qt样式表
      • 8.1 Qt风格
      • 8.3 特殊效果窗体
      • 8.2 Qt样式表
      • 8.3 特殊效果窗口
    • 第10章 国际化、帮助系统与Qt插件
      • 9.1 国际化
      • 9.2 帮助系统
      • 9.3 创建Qt插件
  • 第二篇 图形动画篇
    • 第11章 2D绘图
      • 10.1 基本绘制和填充
      • 10.2 坐标系统
      • 10.3 其他绘制
      • 10.4 双缓冲绘图
      • 10.5 绘图中的其他问题
    • 第12章 图形视图、动画和状态机框架
      • 11.1 图形视图、动画和状态机框架
      • 11.2 图形视图框架的坐标系统和事件
      • 11.3 图形视图框架的其他特性
      • 11.4 动画框架
      • 11.5 状态机框架
    • 第13章 3D绘图
      • 12.1 使用OpenGL绘制图形介绍
      • 12.2 绘制多边形
      • 12.3 绘制彩色3D图形
      • 12.4 使用纹理贴图
  • 第三篇 影音媒体篇
    • 第14章 音视频播放
      • 13.1 播放音频
      • 13.2 播放视频
      • 13.3 QmediaPlayer
    • 第15章 相机和音频录制
      • 14.1 使用相机
      • 14.2 使用音频
  • 第四篇 数据处理篇
    • 第16章 文件、目录和输入/输出
      • 15.1 文件和目录
      • 15.2 文本流和数据流
      • 15.3 其他相关类
    • 第17章 模型/视图编程
      • 16.1 模型/视图架构
      • 16.2 模型类
      • 16.3 视图类
      • 16.4 委托类
      • 16.5 项目视图的便捷类
      • 16.6 在项目视图中启用拖放
    • 第18章 数据库和XML
      • 17.1 数据库
      • 17.2 XML
  • 第五篇 网络通信篇
    • 第19章 网络编程
      • 18.1 网络访问接口
      • 18.2 获取网络接口信息
      • 18.3 UDP
      • 18.4 TCP
    • 第20章 进程和线程
      • 19.1 进程
      • 19.2 线程
    • 第21章 Qt WebEngine
      • 20.1 Qt WebEngine
      • 20.2 基于Qt WebEngine Widget的网页浏览器
  • ※Qt6 QML 实战手册※
    • 第一章 基础设置
      • 1.1 项目注释
      • 1.2 修改程序名字
      • 1.3 程序打包
      • 1.4 Qt Design Studio 结合 Qt Creator使用
      • 1.5 版本控制(GitHub)
    • 第二章 项目文件详解
      • 2.1 CMakeLists.txt
    • 第三章 UI设计
      • 3.1 常用控件大全
    • 第十章 多媒体 Multimedia
    • 异常集合总结
  • ※项目案例※
    • ZSLinux开发
    • DCShell开发
    • DCSft开发
    • Qt程序打包
    • BarTenderPrinter
    • 自动补卡考勤程序
    • 打卡机客户端程序
    • SQL考勤补卡脚本
    • 编译 libssh2
  • 常用知识点总结
    • 【Qt+QML+CMake 开发学习进度】
    • Qt6 开发知识点总结
    • Qt creator 快捷键
    • Qt Design Studio 控件大全
    • QT中添加图片资源文件
    • Qt Creator配合Qt Design Studio
    • 学习参考资料
由 GitBook 提供支持
在本页
  • (1)Qt开发版本选择
  • (2)完整的开发环境:
  • (3)获取当前时间戳
  • ​(4)qml 实现日期时间的实时刷新显示
  • (5)QML中if else判断语句
  • (6)QML连接数据库
  • (7)用CMake设置应用程序图标

这有帮助吗?

  1. 常用知识点总结

Qt6 开发知识点总结

(1)Qt开发版本选择

在 Qt 6.5+ 系列中,最稳定、兼容性最好的版本是:

Qt 6.5.3(当前公开最稳定的 Qt 6.5 LTS 补丁版本)


(2)完整的开发环境:

Qt 6.5.3 + QML + CMake + MSVC 2019 + Qt Creator


(3)获取当前时间戳

Component.onCompleted: {
        console.log(Qt.formatDateTime(new Date(),"yyyy-MM-dd HH:mm:ss.zzz"))

​(4)qml 实现日期时间的实时刷新显示

Item {
        Text { id: time }

        Timer {
            id:timer
            interval: 1000; running: true; repeat: true
            onTriggered: time.text = Qt.formatDateTime(new Date(), "yyyy-MM-dd HH:mm:ss.zzz") 
        }

        Component.onCompleted: {
                    timer.start();
                }

(5)QML中if else判断语句

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Item {
        Text {
            id: time
            font.pixelSize: 24
        }

        Text {
            id: txtstatus
            x: 300
            font.pixelSize: 24
            text: qsTr("状态")
        }

        Timer {
            interval: 1000; running: true; repeat: true
            onTriggered: {

                time.text = Qt.formatDateTime(new Date(), "yyyy-MM-dd hh:mm:ss")

                var d1 = '07:35:00'
                var d2 = '12:05:00'
                var d3 = '13:05:00'
                var d4 = '17:35:00'

                var d5 = Qt.formatDateTime(new Date(), "hh:mm:ss")
                console.log(d5)
                // console.log(typeof(d5))
                // console.log(typeof(d1))

                if ( d5===d1  || d5===d2 || d5===d3 || d5===d4 ){

                    txtstatus.text="正在插入..."
                    console.log("执行插入语句")
                }else{
                    txtstatus.text="等待执行插入中..."
                    console.log("等待状态!")
                }

            }

        }


    }


}


(6)QML连接数据库

(7)用CMake设置应用程序图标

  1. 先准备一张.ico的图标,命名为“appicon.ico”,放在与源文件同一级目录

  2. 新建一个名称为“appicon.rc”的文件,键入一下内容:

    IDI_ICON1 ICON DISCARDABLE "appicon.ico"
  3. 在CMakeLists.txt文件中编辑以下内容:

    set(APP_ICON_RESOURCE_WINDOWS "appicon.rc")
    qt_add_executable(appXSabre
        main.cpp
        ${APP_ICON_RESOURCE_WINDOWS}
    )                                        
  4. 编译运行程序,可以看到窗口左上角和应用程序都已有了图标

(9)QML调用另一个QML文件并显示

注意

1.调用的qml文件必须也是根元素为window,否则visible元素会报错。

2.QML的文件第一个字母必须大写

3.要调用的QML文件必须在主QML里实例化

main.qml文件

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")


    Qml1{	//实例化另一个文件,文件名称第一个要大写
        id:qwe
    }


    Rectangle {
        width: 320; height: 240
        color: "black"

        Text {
            id: txt
            text: "打开另一个窗口"
            font.pixelSize: 20
            anchors.centerIn: parent
        }
        MouseArea {
            id: mouse_area
            anchors.fill: parent  // 有效区域
            onClicked: {
                qwe.show()	//另一个qml文件显示
            }
        }
    }
}

Qml1.qml文件

import QtQuick 2.0
import QtQuick.Window 2.2

Window {
    width: 320; height: 240
    visible: false	//该窗口一开始默认隐藏的
    color: "lightblue"
    
    Text {
        id: txt
        text: "另一个窗口"
        font.pixelSize: 20
        anchors.centerIn: parent
    }
}

(9)QML调用C++

方法1:在QML系统中注册C++类型

1.新建C++类,比如:sqlconnection,继承QObject类

2.sqlconnection.h代码

// Some code

3.sqlconnection.cpp代码

// Some code

4.main.cpp主函数代码

// Some code

5.在main.qml文件中,导入注册类的命名空间,实例化对象,然后通过该对象的id来访问

该对象的属性和方法

// Some code

方法2

参考资料:

(10)Qt6通过CMake连接SQL Server

  1. 配置好本机的ODBC

  2. 参考帮助文档

在CMakeLists.txt文件中添加如下两行,第一行添加sql模块,第二行添加Qt6::Sql

find_package(Qt6 6.2 COMPONENTS Quick REQUIRED Sql)
target_link_libraries(appKaoQin PRIVATE Qt6::Quick Qt6::Sql)

(11)报错处理

提示:

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed

解决方案:补充如下代码

db.close();
QSqlDatabase::removeDatabase("QODBC");

(11)QT使用QSetting将MSSQL数据库通过写入注册表创建ODBC数据源

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSqlDatabase>
#include <QSqlError>
#include<QSqlQuery>
#include <QSettings>
#include <QString>
#include<QDebug>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/StudyDemo01/main.qml"_qs);
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

//以下为正式内容
    //将数据库写入注册表
        //需要管理员权限运行
        QSettings reg_2("HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources", QSettings::NativeFormat);
        reg_2.setValue("dsnName","SQL Server");//dsnName为数据源名

        QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBC.INI", QSettings::NativeFormat);
        reg.beginGroup("dsnName");
        reg.setValue("Driver","C:\\Windows\\system32\\SQLSRV32.dll");
        reg.setValue("Description","database");
        reg.setValue("Server","192.168.10.10");//主机IP地址
        reg.setValue("Database","ipinfo");//databaseName为默认数据库
        reg.setValue("LastUser","sa");//用户名
        reg.setValue("Trusted_Connection","No"); //Yes集成身份验证,No为混合身份验证
        reg.setValue("PWD","123456");

        QSettings reg_1("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSSQLServer\\Client\\ConnectTo", QSettings::NativeFormat);
        reg_1.setValue("123.56.87.47","DBMSSOCN,192.168.10.10,1433");//1433为默认端口,可修改,只改IP,其他别动




    //连接MSSQL数据库
       QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

       qDebug ()<< "sql driver "<< db.isValid();
       db.setHostName("192.168.10.10");
      //设置数据源名称
       db.setDatabaseName("dsnName");
       db.setUserName("sa");
       db.setPassword("123456");

       db.open();

       if(!db.open())
       {
           qDebug()<<db.lastError();
           //return false;


       }
       else
       {
           qDebug()<<"数据库连接成功!";
          //  return true;
           QSqlQuery query(db);

//           qDebug() << query.exec("select * from ipdata");

           query.exec("select * from ipdata");
           while(query.next())
           {
               qDebug() << query.value(0).toString() << query.value(1).toString();
           }

       }

//以上为正式内容
    return app.exec();
}

qDebug信息如下:

sql driver  true
数据库连接成功!
"物控" "192.168.10.100"
"销售" "192.168.10.1"
"销售" "192.168.10.2"
"直营部" "192.168.10.11"
"直营部" "192.168.10.11"
"直营部123" "192.168.10.11"
"直营部123" "192.168.10.11"

参考资料:

QT使用QSetting将MSSQL数据库通过写入注册表创建ODBC数据源

DSN 和连接字符串关键字和属性

(12)

上一页【Qt+QML+CMake 开发学习进度】下一页Qt creator 快捷键

最后更新于17天前

这有帮助吗?

参考资料:

参考资料:

图标在线生成器:

参考资料:

参考资料:

参考资料:

https://by.cx/2018/08/qt-qml-mysql/
https://www.zigzagrainbow.com/blog/cmake-application-icon
http://icon.p2hp.com/
https://blog.csdn.net/youngdianfeng/article/details/107444117
https://blog.csdn.net/qq_34139994/article/details/105195328
https://zhuanlan.zhihu.com/p/515424581?utm_id=0
https://www.cnblogs.com/ybqjymy/p/14270424.html
https://www.bilibili.com/read/cv16264207/
https://blog.csdn.net/wjian20/article/details/8472989
https://blog.csdn.net/qq_38737205/article/details/116756356
https://docs.microsoft.com/zh-cn/sql/connect/odbc/dsn-connection-string-attribute?view=sql-server-ver16#authentication---sql_copt_ss_authentication
https://docs.microsoft.com/zh-cn/sql/relational-databases/native-client/applications/using-connection-string-keywords-with-sql-server-native-client?view=sql-server-ver16
https://blog.csdn.net/xftyyyyb/article/details/83188219