Portál AbcLinuxu, 17. července 2025 11:51
from PyQt4 import QtGui qapp=QtGui.QApplication(sys.argv) import thread thread.start_new_thread(qapp.exec_,())protože chci, aby mi
qapp.exec_()
běželo na pozadí. Sice to funguje (okna klikají etc), ale křičí to na mě
QApplication::exec: Must be called from the main threadcož je ale přesně to, co nechci -- v době kdy se pouští Qt, už několik ostatních threadů běží. Lze to nějak obejít? Může být i pomocí c++. Díky.
void UserInterface::run() { waitForStart(); const char* argv[1] = { "rdp" }; int argc = 1; app = new QApplication(argc, (char **) argv); view = new Window(this, container); view->showMe(); app->exec(); delete view; view = 0; delete app; app = 0; }
waitForStart();
, zkusím to.
QPixmap: It is not safe to use pixmaps outside the GUI thread
.
Asi takhle:
import sys,threading def startQt4(): qapp=QApplication(sys.argv) qapp.exec_() threading.start_new_thread(startQt4,()) # ...
Obecně každý QObject potřebuje ke své funkčnosti (tím myslím funkční signnály, sloty) běžící "qt smyčku" v tom samém threadu, kde byl vytvořen*, ať už je spuštěna v QApplication::exec() či QThread::exec(). QApplication se od QThreadu liší akorát tím, že inicializuje nějaký ty data v Qt knihovně a označí thread, kde je vytvořen, za hlavní.
* Lze použít QObject::moveToThread k "přesunutí" do jiného threadu. Jak se s tím ale vyrovnají widgety, to nevím. Možná dobře, možná ne, záleží na tom, jak dobře se s tím vyrovná XLib.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.