11

アプリケーションを終了するとき (およびそのときのみ)、コマンド プロンプトに次の (およびこれらのメッセージのみ) 繰り返されるメッセージが表示されます。

QObject::startTimer: QTimer can only be used with threads started with QThread
QObject::startTimer: QTimer can only be used with threads started with QThread
QObject::startTimer: QTimer can only be used with threads started with QThread

コード (または QThread) で QTimer を使用したことがないため、これは私にとって非常に奇妙です。実際、アプリケーションを使用してエラーやクラッシュは発生しないため、これは実際には問題ではありません。これは、Windows OS と Linux OS の両方で発生します。

すべての私のインポート:

from __future__ import print_function
from PyQt4.QtGui import (QApplication, QMainWindow,
                         QFileSystemModel, QTreeView, QTableView,
                         QAbstractItemView, QMenu, QAction, QKeyEvent)
from PyQt4.QtCore import QDir, Qt, SIGNAL, QString, QFileInfo, QCoreApplication
import sys

主な機能:

def main():
    app = QApplication(sys.argv)
    app.setApplicationName("QFM")
    app.setStyle("plastique")
    gui = MainWindow()
    gui.show()
    app.exec_()

おそらく、QFileSystemWatcher (QFileSystemModel によって使用される) に関連するものである可能性があります。おそらく、いくつかの QTimer 機能を使用していると思います。

4

3 に答える 3

10

私は過去に同様の問題を抱えていました。

QFileSystemModelドキュメントページには次のように書かれています:

QFileSystemModel.__init__ (self, QObject parent = None)

親引数は、None でない場合、self が PyQt ではなく Qt によって所有されるようにします。

指定された親を持つファイル システム モデルを構築します。

引数を渡さないとparent、Python ガベージ コレクターが間違ったタイミングでオブジェクトを削除し、副作用として言及したエラーが発生する可能性があります。私のアドバイスは、オブジェクトに適切な親があることを確認することです。問題を解決する必要があると思います。

PS: 使用するすべてのクラスのドキュメントを確認していません。おそらくQFileSystemModel、このことが起こる唯一のクラスではありません。

于 2012-11-29T18:38:20.523 に答える
3

私の経験では、これは Qt クラスをサブクラス化し、サブクラスのメンバーの 1 つが Qt 階層の一部ではない場合に発生します。例えば:

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        ...
        self.my_widget = MyWidget()
        ...

MyWidgetこのように実装するとQTimer、オブジェクトが破棄されたときにエラーが発生します。

class MyWidget(object):
    def __init__(self):
        # do stuff

ただし、MyWidgetから継承する場合QObject、エラーは発生しません。

class MyWidget(QObject):
    def __init__(self, parent):
        super(MyWidget, self).__init__(parent)
        #do stuff
于 2013-03-01T21:44:38.333 に答える