Portál AbcLinuxu, 4. listopadu 2025 20:38
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.