среда, 22 июня 2011 г.

Qt: "A QApplication instance already exists"

Не так давно мы публиковали пример графического плагина на основе связки Qt и PySide. Использование графического интерфейса предоставляет широчайшие возможности. К сожалению, приведенный код содержал один существенный недостаток: при повторном запуске скрипта появлялось сообщение: "A QApplication instance already exists".

Чтобы избежать этого, нужно совсем чуть-чуть переработать процедуру инициализации Qt. А именно: проверить существование синглтона QApplication c помощью вызова QCoreApplication::instance()

Таким образом, прототип расширения для windbg c графическим интерфейсом мог бы выглядеть примерно так:

from PySide.QtCore import *
from PySide.QtGui import *              

class MainForm( QDialog ):
    
    def __init__( self ):
        QDialog.__init__( self, None )            
        self.setWindowTitle("Hello")      

def main():      

    app = QCoreApplication.instance()

    if app == None:
        app = QApplication( [] )

    mainForm = MainForm()
    mainForm.show()
    exitres = app.exec_()

if __name__ == "__main__":
    main()