[每周一更]-(第110期):QT开发最佳实战(php/go/python/javascript)

news2024/11/27 2:37:07

在这里插入图片描述

文章目录

      • 1. 使用 Go 开发 Qt 应用
        • 工具:therecipe/qt
          • 安装和配置
          • 示例代码
      • 2. 使用 Python 开发 Qt 应用
        • 工具:PyQt 或 PySide
          • 安装和配置
          • 示例代码(PyQt5)
      • 3. 使用 PHP 开发 Qt 应用
        • 工具:PHP-Qt
          • 安装和配置
          • 示例代码
      • 4. 使用 前端语言 开发 Qt 应用
        • 工具:QML 和 Qt Quick
          • 安装和配置
          • 示例代码
      • 5、常见软件的跨平台桌面应用技术对比
        • 5.1、代表性桌面应用
        • 5.2、常用技术优势对比
        • 5.2.1. **Electron**
        • 5.2.2. **Qt**
        • 5.2.3. **JavaFX**
        • 5.2.4. **.NET (WPF 和 WinForms)**

调研不同开发语言开发QT的最佳实战,列举以下四种对比:

  • Go:使用therecipe/qt,适合有Go开发经验的开发者。
  • Python:使用PyQt或PySide,生态成熟,适合快速开发和原型设计。在2009年8月,PySide首次发布。提供和PyQt类似的功能,并兼容API。但与PyQt不同处为使用LGPL许可。PySide可以在LGPL协议下使用,PyQt则在GPL协议下使用。
  • PHP:不推荐,PHP-Qt较复杂且不常用。
  • JavaScript:使用QML和Qt Quick,适合设计复杂UI,使用JavaScript进行逻辑编写,需要跟c++交互(QML做UI,JavaScript写逻辑,C++写后台)。

结果:Go和Python都可以,但Go的方法库长期不更新了,Python对应的PyQt、PySide官方还有不断更新

  • https://github.com/therecipe/qt.git 更新时间 4年前了,874commit,10.3k star(2024.7.24统计)
  • https://github.com/go-qml/qml.git 更新时间 10年前,341commit,2k(2024.7.24统计)
  • https://github.com/PyQt5/PyQt.git 更新时间 2个月前,562commit,6.5k star(2024.7.24统计)
  • https://pypi.org/project/PySide6/#history 最新版本:6.7.2(2024.7.24统计)
  • https://pypi.org/project/PyQt5/#history 最新版本:5.15.11(2024.7.24统计)

尽管Qt主要使用C++进行开发,但通过绑定库和桥接工具,也可以使用其他编程语言如Go、Python、PHP等来开发Qt应用。以下是使用这些语言开发Qt应用的实战方式和示例。

1. 使用 Go 开发 Qt 应用

工具:therecipe/qt
安装和配置
  1. 安装Qt和Go:确保你已经安装了Qt和Go。
  2. 安装therecipe/qt
go get -u -v github.com/therecipe/qt/cmd/...
  1. 配置therecipe/qt
$(go env GOPATH)/bin/qtsetup
示例代码
package main

import (
    "github.com/therecipe/qt/widgets"
    "os"
)

func main() {
    app := widgets.NewQApplication(len(os.Args), os.Args)
    window := widgets.NewQMainWindow(nil, 0)
    window.SetWindowTitle("Hello Qt")
    
    centralWidget := widgets.NewQWidget(nil, 0)
    window.SetCentralWidget(centralWidget)
    layout := widgets.NewQVBoxLayout()
    
    label := widgets.NewQLabel2("Hello, World!", nil, 0)
    layout.AddWidget(label, 0, 0)
    
    button := widgets.NewQPushButton2("Click me!", nil)
    layout.AddWidget(button, 0, 0)
    
    button.ConnectClicked(func(bool) {
        label.SetText("Button Clicked!")
    })
    
    centralWidget.SetLayout(layout)
    window.Show()
    app.Exec()
}

2. 使用 Python 开发 Qt 应用

工具:PyQt 或 PySide
安装和配置
  1. 安装PyQt5
pip install PyQt5

  1. 安装PySide2
pip install PySide2
示例代码(PyQt5)
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget

def main():
    app = QApplication(sys.argv)
    window = QMainWindow()
    window.setWindowTitle("Hello Qt")
    
    centralWidget = QWidget()
    window.setCentralWidget(centralWidget)
    layout = QVBoxLayout()
    
    label = QLabel("Hello, World!")
    layout.addWidget(label)
    
    button = QPushButton("Click me!")
    layout.addWidget(button)
    
    button.clicked.connect(lambda: label.setText("Button Clicked!"))
    
    centralWidget.setLayout(layout)
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

3. 使用 PHP 开发 Qt 应用

工具:PHP-Qt
安装和配置

PHP-Qt是一个不太常见的绑定库。需要自己编译和配置,社区支持较少,因此不推荐在生产环境中使用。若要尝试:

  1. 克隆PHP-Qt仓库
git clone https://github.com/qi-plugins/php-qt.git
  1. 编译和安装

按照仓库中的README文件进行编译和安装。

示例代码

由于PHP-Qt的复杂性,以下示例可能需要根据具体环境调整。

<?php
// Ensure PHP-Qt extension is loaded
if (!extension_loaded('qt')) {
    dl('qt.so');
}

$application = new QApplication($argc, $argv);
$window = new QMainWindow();
$window->setWindowTitle("Hello Qt");

$centralWidget = new QWidget();
$window->setCentralWidget($centralWidget);
$layout = new QVBoxLayout();

$label = new QLabel("Hello, World!");
$layout->addWidget($label);

$button = new QPushButton("Click me!");
$layout->addWidget($button);

$button->connect($button, SIGNAL('clicked()'), function() use ($label) {
    $label->setText("Button Clicked!");
});

$centralWidget->setLayout($layout);
$window->show();
$application->exec();
?>

4. 使用 前端语言 开发 Qt 应用

工具:QML 和 Qt Quick

QML 是一种基于JavaScript的声明式语言,用于设计UI。

安装和配置
  1. 安装Qt:确保安装Qt开发工具。
  2. 编写QML文件:创建一个QML文件定义UI。
示例代码

main.qml

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello Qt")

    Column {
        anchors.centerIn: parent

        Text {
            id: label
            text: qsTr("Hello, World!")
            font.pixelSize: 24
        }

        Button {
            text: qsTr("Click me!")
            onClicked: label.text = qsTr("Button Clicked!")
        }
    }
}

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

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

    return app.exec();
}

5、常见软件的跨平台桌面应用技术对比

清理软件垃圾,发现Xmind客户端采用的是Electron,Electron是基于Web技术的跨平台桌面应用开发框架,使用HTML、CSS和JavaScript来构建应用程序,然后就延伸查了一下其他相关成熟的跨平台桌面应用技术。

5.1、代表性桌面应用
  • Google Earth:QT

    • 描述:谷歌开发的虚拟地球仪应用程序。
    • 特点:跨平台,提供3D地形和建筑物视图。
  • Discord:Electron

    • 描述:主要用于游戏玩家的语音和文字聊天工具。
    • 特点:跨平台,支持语音、视频和文本聊天。
  • Apache NetBeans:JavaFX

    • 描述:Apache 基金会开发的集成开发环境(IDE)。

    • 特点:支持多种编程语言,部分界面使用 JavaFX。

  • Microsoft Visual Studio:.NET (WPF 和 WinForms)

    • 描述:微软开发的集成开发环境(IDE)。
    • 特点:主要用于 Windows 平台,支持多种编程语言和开发工具。
5.2、常用技术优势对比
5.2.1. Electron
  • 优点:
    • 跨平台:可以在 Windows、MacOS 和 Linux 上运行。
    • 使用 Web 技术:开发者可以使用熟悉的 HTML、CSS 和 JavaScript 技术栈。
    • 丰富的生态系统:大量的开源库和工具可以加速开发。
  • 缺点:
    • 性能较低:由于基于 Chromium 和 Node.js,Electron 应用的内存和 CPU 使用较高。
    • 体积较大:Electron 应用通常比原生应用体积大。
5.2.2. Qt
  • 优点:
    • 高性能:基于 C++,性能和响应速度优越。
    • 原生体验:在各平台上提供一致的用户体验。
    • 跨平台支持:支持 Windows、MacOS、Linux、iOS 和 Android。
    • 丰富的组件库:提供大量现成的 UI 组件和工具。
  • 缺点:
    • 学习曲线:对于不熟悉 C++ 的开发者,学习成本较高。
    • 开发速度:相比 Web 技术,开发速度可能较慢。
5.2.3. JavaFX
  • 优点:
    • 跨平台:可以在 Windows、MacOS 和 Linux 上运行。
    • 丰富的 UI 组件:提供多种现成的 UI 组件。
    • 与 Java 生态系统集成:便于使用现有的 Java 库和工具。
  • 缺点:
    • 性能:相比于 Qt,JavaFX 的性能可能稍差。
    • 较低的流行度:相比于 Electron 和 Qt,JavaFX 的社区和生态系统较小。
5.2.4. .NET (WPF 和 WinForms)
  • 优点:
    • 强大的开发工具:如 Visual Studio。
    • 丰富的库和组件:.NET 生态系统提供了大量的库和组件。
    • 与 Windows 的深度集成:特别适用于 Windows 应用开发。
  • 缺点:
    • 跨平台支持有限:虽然有 .NET Core 和 MAUI,但对 MacOS 和 Linux 的支持仍在改进中。
    • 学习曲线:对于不熟悉 .NET 的开发者,学习成本较高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VLL基本原理

VLL的基本架构 VLL技术通过隧道承载CE&#xff08;Customer Edge&#xff09;端的各种二层业务&#xff0c;透明传递CE端的二层数据&#xff0c;为用户提供点对点的二层VPN服务。 VLL的基本架构可以分为AC、VC和Tunnel三个部分&#xff0c;而PW这个概念也会经常用到。如图1所…

工控接入网关:实现工业物联网的关键技术

工业控制系统随着科技的发展&#xff0c;逐渐向数字化、智能化的方向发展。工控接入网关作为工业物联网的关键技术之一&#xff0c;具有重要的作用和意义。本文将从工控接入网关的定义、功能、应用、优势等方面进行全面详细地介绍。    一、工控接入网关的定义与功能 工控接…

新零售社交电商系统前景分析

新零售社交电商系统前景分析 新零售社交电商系统作为数字经济的创新趋势之一&#xff0c;展现出强大的市场活力和发展潜力。 以下是对其前景的分析&#xff1a; 市场规模的增长&#xff1a;中国社交电商的交易规模在2021年达到了23785.7亿元&#xff0c;并预计在2023年将增长…

面了拼多多算法岗,被疯狂拷打。。。

暑期实习基本结束了&#xff0c;校招即将开启。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解惑答疑&…

8-4 循环神经网络

对于 (8.4.2)中的函数 f f f&#xff0c;隐变量模型不是近似值。 毕竟 h t h_{t} ht​是可以仅仅存储到目前为止观察到的所有数据&#xff0c; 然而这样的操作可能会使计算和存储的代价都变得昂贵。 回想一下&#xff0c;我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的…

VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤

文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

Windows系统开机出现Minimal BASH-like line editingis supported解决方法

Minimal BASH-like line editingis supported解决方法 一、问题描述 因为电脑不知道是不是安装了双系统&#xff0c;开机的时候会出现标题中的这个问题&#xff0c;网上查找资料一般说是双系统的问题&#xff0c;引导项缺失&#xff0c;然后Ubuntu进不去。可是我的电脑好像没有…

LR12 在Controller设置脚本并运行

1、当在Generator配置脚本完成后&#xff0c;点击工具-创建Controller场景&#xff0c;输入线程数即Vuser后点击确定。 2、这时会Controller中打开刚才配置的脚本&#xff0c;显示如下图所示&#xff0c; 在全局计划中点击启动Vuser,界面会显示如下弹窗&#xff0c;设置并发用户…

NTP时间服务器的工作原理解析

在当今数字化和信息化高度发展的时代&#xff0c;时间的准确性和同步性对于各种系统和应用程序至关重要。NTP时间服务器作为确保时间精准同步的关键设备&#xff0c;发挥着不可或缺的作用。 NTP 时间服务器的核心目标是为网络中的设备提供准确、一致和可靠的时间信息。它基于一…

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台&#xff0c;它集成了独立的6TOPS&#xff08;Tera Operations Per Second&#xff0c;每秒万亿次操作&#xff09;NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;用于处理人工智能相关的任务。此外&#xff0…

7.实时时钟(RTC)

理论 使用时钟晶振&#xff1a;32.768KHz(2{15}) 代码编写 OLED显示实时时间&#xff0c;串口打印 晶体、RTC配置 晶体配置 RTC配置 串口配置参考&#xff1a;链接 Cube IDE代码 mian.c /* USER CODE BEGIN Includes */ #include "string.h" //27行 /* USER CODE EN…

TPAMI 2024 带Token迁移的整体预训练Transformer金字塔网络——Fast-iTPN

Fast-iTPN: Integrally Pre-Trained Transformer Pyramid Network with Token Migration https://github.com/sunsmarterjie/iTPN/blob/main https://arxiv.org/pdf/2211.12735 Introduction 背景 近年来&#xff0c;视觉模型取得了两大进展&#xff0c;一是将Vision Trans…

SAP LE学习笔记03 - 在IM(在库管理)中收货到仓库的流程,关联 WM移动Type与IM移动Type

上一章讲了 LE-WM的 WM和IM之间的关系。 SAP LE学习笔记02 - WM和库存管理&#xff08;IM&#xff09;之间的关系&#xff0c;保管Lot&#xff08;Quant&#xff09;-CSDN博客 本章继续将LE-WM的知识。 目录 1&#xff0c;在IM(在库管理)中收货到仓库的流程 a&#xff09;&…

Golang | Leetcode Golang题解之第337题打家劫舍III

题目&#xff1a; 题解&#xff1a; func rob(root *TreeNode) int {val : dfs(root)return max(val[0], val[1]) }func dfs(node *TreeNode) []int {if node nil {return []int{0, 0}}l, r : dfs(node.Left), dfs(node.Right)selected : node.Val l[1] r[1]notSelected : …

EMC学习笔记5——辐射骚扰发射

辐射骚扰发射是基本的实验项目&#xff0c;目的是检验设备在工作时有没有产生意外的过强电磁辐射。 例如发电机&#xff0c;在工作时会产生意外的电磁波辐射&#xff0c;因为电子设备中隐藏了一些天线&#xff0c;这些隐藏的天线在辐射电磁波。 一、两种基本的天线结构 如前面…

智能小家电能否利用亚马逊VC搭上跨境快车?——WAYLI威利跨境助力商家

智能小家电行业在全球化背景下&#xff0c;正迎来前所未有的发展机遇。亚马逊为品牌商和制造商提供的一站式服务平台&#xff0c;为智能小家电企业提供了搭乘跨境快车、拓展国际市场的绝佳机会。 首先&#xff0c;亚马逊VC平台能够帮助智能小家电企业简化与亚马逊的合作流程&am…

Hive3:三种常用的复杂数据类型

一、Array类型 1、数据示例 2、实操 元数据 zhangsan beijing,shanghai,tianjin,hangzhou wangwu changchun,chengdu,wuhan,beijin创建表 CREATE TABLE myhive.test_array(name string, work_locations array<string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t…

远程调用-OpenFeign

目录 1.RestTemplate存在问题 2.OpenFeign介绍 一、主要特点 二、应用场景 3.OpenFeign快速上手 3.1引入依赖 3.2添加注解 3.3编写OpenFeign的客户端 3.4远程调用 ​编辑3.5测试 4.OpenFeign参数传递 4.1传递单个参数 4.2传递多个参数 4.3传递对象 4.4传递JSO…

搬瓦工美国西海岸CN2 GIA VPS测评

很多人想知道搬瓦工美国CN2 GIA VPS系列怎么样&#xff1f;实际情况是&#xff1a;搬瓦工在美国西海岸的sanjose和losangeles运作着2.5Gbps-10Gbps CN2GIA带宽的VPS&#xff0c;底层虚拟为KVM&#xff0c;纯SSD阵列&#xff0c;支持在多机房之间切换。由于三网强制走同样的路由…

每日OJ_牛客_QQ2 微信红包

目录 牛客_QQ2 微信红包 解析代码 牛客_QQ2 微信红包 微信红包_牛客题霸_牛客网 解析代码 本题很多思路&#xff0c;第一种排序思路&#xff0c;如果一个数出现次数超过一半了&#xff0c;排序过后&#xff0c;必然排在中间&#xff0c;则最后遍历整个数组查看是否符合即可。…