为什么选择Qt for Python?

../_images/tiobe.png
TIOBE index for Python

截图来自 tiobe.com/tiobe-index/python, 于2021.09.06

要回答这个问题,我们需要退一步,稍微讨论一下语言。

Python 已经存在了几乎与 Qt 相同的时间,同样地,它一直在发展,并转变为许多编程领域中最常用、最受喜爱和最需要的语言。

目前(2021年),很少有人了解机器学习和人工智能,却没有听说过Python。同样,当我们听到数据科学/分析/工程时,我们知道它很可能与Python有关。

可以通过公开的调查来验证这一说法,这些调查显示了Python语言的演变和偏好,例如过去几年的StackOverflow调查:

2019

2020

2021

最受欢迎的语言

第二名

第三名

第六名

最受欢迎的语言

第一名

第一名

第一名

以及TIOBE指数(右侧图片)。

很自然地认为这些来源可能不足以从总体上判断语言,但它确实突显了全球开发者中的一种趋势。

降低Qt门槛

经验丰富的C++开发人员将能够轻松地从零开始设置Qt应用程序,甚至能够理解使用Qt编写的不同代码库。此外,许多团队是多学科的,其他项目/公司的开发人员可能不精通C++。

Python一直在吸引人们进入编程领域,出于同样的原因,即使是具有不同背景的人也能够编写代码,这意味着不同的团队能够使用“相同的语言”进行交流。

在Python中创建Qt应用程序只需要几行代码,并且执行它不需要太多配置。作为一个/不公平的/例子,让我们检查一个简单的hello world应用程序的代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT
    public:
        MainWindow(QWidget *parent = nullptr);
    private slots:
        void handleButton();
    private:
        QPushButton *m_button;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent)
{
    m_button = new QPushButton("My Button", this);
    connect(m_button, SIGNAL(clicked()), this,
            SLOT(handleButton()));
}

void MainWindow::handleButton()
{
    m_button->setText("Ready");
}
#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec(d);
}
import sys
from pyside6.QtWidgets import (QApplication, QMainWindow,
                               QPushButton)

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.button = QPushButton("My Button", self)
        self.button.clicked.connect(self.handleButton)

    def handleButton(self):
        self.button.setText("Ready")

if __name__ == "__main__":
    app = QApplication([])
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec())

可以说,大多数样板代码都是由许多优秀的IDE提供的,比如QtCreator,但使用外部工具肯定需要一些练习来使用它们并熟悉它们。

团结就是力量

在我们的使命中,让更多开发者进入Qt世界,重要的是要注意这并不意味着C++开发者被遗忘。

与绑定一起,Qt for Python 提供了我们的绑定生成器, Shiboken(查看 绑定生成:什么是 Shiboken?),其功能已经 通过我们活动中的演讲广泛展示,例如来自我们的 视频 部分的内容。

生成两种语言之间的绑定并不是什么新鲜事,但这始终是一项不简单的任务,主要是在项目中使用外部模块/库时尽可能保持兼容性。

Shiboken的主要用途是扩展Qt/C++项目的功能,使其可编写脚本

应用程序可脚本化意味着什么?

  • 使解释型语言能够直接与Qt/C++应用程序交互,

  • 提供从Python修改和创建应用程序组件/元素的选项,

  • 为应用程序创建插件/附加系统的可能性。

  • 使用外部Python功能补充一个过程。

查看这个Shiboken Webinar以获取一个实践示例。

Shiboken 擅长于依赖 Qt 的绑定生成,这意味着任何 Qt/C++ 项目都可以轻松地暴露给 Python。此外,Shiboken 已经证明了对 C++ 项目(不依赖 Qt)的支持,如事件演讲和博客文章所示。

为知名解决方案/项目添加Python支持是我们在行业中广泛看到的一种模式,适用于各种设备。 这就是为什么我们每天都在努力改进Qt for Python的提供。

我们相信Qt和Python都将从这种互动中受益。