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が必要なんだとあらためてわかった。
この記事が気に入ったらサポートをしてみませんか?