假设您创建了一个新线程,然后在它启动后调用一个静态函数。在该静态函数中,您需要创建并显示自定义 qdialog。您如何创建它以使其没有父级并位于正确的线程中?
构造函数将父级设置为 0,但它仍然报告无法为不同线程中的父级创建子级的错误。因为它是一个静态函数,所以我不能使用“this”对象,如果没有“this”,我就无法检索当前线程或线程 ID。我想我也许可以调用 myCustomDialog->moveToThread() 但我不知道如何从静态函数中确定正确的线程。
如果我使用 QMessageBox 静态函数之一,一切正常。例如,调用 QMessageBox::information(0, tr("Title"), tr("Message")) 不会报告任何错误。如何编码我的自定义 qdialog,使其功能类似于 qmessagebox 静态函数?
有没有办法从 qApp 对象中检索所有正在运行的线程的列表?还有其他建议吗?
static int myFunction();
int myObject::myFunction()
{
myCustomDialog *mcd = new myCustomDialog();
// as soon as I call exec() it reports an error and crashes
mcd->exec();
// QObject: Cannot create children for a parent that is in a different thread.
// can't call mcd->moveToThread() without knowing the current thread
// how can I determine the current thread from this static function?
// if parent = 0 then why is this error occurring?
return 0;
}
myCustomDialog(QWidget *parent = 0);
myCustomDialog::myCustomDialog(QWidget *parent) : QDialog(parent)
{
// create widgets and layout here
}