Qt for Pythonのinvalid nullptr parameterを回避

GUIないけどQtモジュールを使いたい

GUIじゃないのに、Qtモジュールを使うというのは若干、本末転倒だけどQtにある豊富なモジュールを場合によって利用したい場合がある。
例えば、今利用できるデータベースエンジンはなんだといった場合だと。

from PySide6.QtSql import QSqlDatabase

def main():
    driver_list = (
        "QDB2",
        "QIBASE",
        "QMYSQL",
        "QOCI",
        "QODBC",
        "QPSQL",
        "QSQLITE",
        "QMIMER",
    )
    for d in driver_list:
        print(d, QSqlDatabase.isDriverAvailable(d))

一様、このコードを実行すると以下のようになると思う。

実行結果

呼び出したQtモジュール(今回は、QSqlDatabaseのスタティックメソッドisDriverAvailable)は期待通り何だけど、
「qt.core.qobject.connect: QObject::connect(QObject, Unknown): invalid nullptr parameter」って何?となる。
う~ん。なんだろうネットの情報とかを検索するとなんか正しく相手と接続できていない!(Unknown:不明だしね)
ということらしいので、なんとなくわかったのがアプリケーションオブジェクト作って無いから?とひらめく。

from PySide6.QtSql import QSqlDatabase
from PySide6.QtWidgets import QApplication

def main():

    app = QApplication()

    driver_list = (
        "QDB2",
        "QIBASE",
        "QMYSQL",
        "QOCI",
        "QODBC",
        "QPSQL",
        "QSQLITE",
        "QMIMER",
    )
    for d in driver_list:
        print(d, QSqlDatabase.isDriverAvailable(d))

修正して実行すると。

修正した実行結果

期待通りに「qt.core.qobject.connect: QObject::connect(QObject, Unknown): invalid nullptr parameter」が表示されなくなる。
うーん。Qtモジュールを利用するときはQApplicationが必要なんだとあらためてわかった。

この記事が気に入ったらサポートをしてみませんか?