QT螺纹。使用pyqt设置QtHelpEngin

2024-06-16 12:06:14 发布

您现在位置:Python中文网/ 问答频道 /正文

如果您能帮助我使用QtHelpEngine,我将不胜感激。我试过几种方法,结果各不相同。下面是我觉得最直观的代码,但我遇到了线程问题。我现在遇到的问题是使用QT信号以正确的顺序执行必要的操作。在

我得到的错误是:

QObject: Cannot create children for a parent that is in a different thread. (Parent is QHelpEngine(0x226f6143780), parent's thread is QmlSearch(0x226f61382a0), current thread is QThread(0x226f61bda80)

如果有人能帮我解决这个问题,我会很感激的。在

谢谢!在

from PyQt5 import QtHelp, QtCore
import sys
import time


class QmlSearch(QtCore.QThread):

    def run(self):
        # setup help engine
        qhcPath = 'C:/Users/jonoa/Documents/TEST.qhc'   # just a temporary test file
        self.qmlHelp = QtHelp.QHelpEngine(qhcPath)
        self.qmlHelp.setupFinished.connect(self.onSetupFinished)
        self.qmlHelp.setupData()

    def onSetupFinished(self):
        print('setup finished')
        # when setup is finished register documentation
        path2 = 'C:/Program Files/QT/Docs/Qt-5.7/qtquick.qch'   # an example test file
        self.qmlHelp.registerDocumentation(path2)

        # Then setup the search engine
        self.qmlSearch = self.qmlHelp.searchEngine()    # This is where the script breaks.
        self.qmlSearch.reindexDocumentation()

    def onIndexFinished(self):
        print('indexing finished')
        # create search query and perform search
        query = QtHelp.QHelpSearchQuery(0, ['rectangle'])
        self.qmlSearch.searchingFinished.connect(self.onSearchFinished)
        self.qmlSearch.search([query])

    def onSearchFinished(self):
        print('search finished')

        # print some of the hits and finish
        print([a for a in self.qmlSearch.hits(0, self.qmlSearch.hitCount()) if 'rectangle' in a[1].lower()])
        self.finished.emit()

if __name__ == '__main__':
    app = QtCore.QCoreApplication(sys.argv)
    thread = QmlSearch()
    thread.finished.connect(app.exit)
    thread.start()
    sys.exit(app.exec_())

Tags: inimportselfsearchisdefsetupthread