Допустим, вы создали новый поток, который после запуска вызывает статическую функцию. Внутри этой статической функции вам нужно создать и отобразить собственный qdialog. Как вы можете создать его, чтобы он не имел родителя и находился в нужном потоке?
Конструктор устанавливает для родителя значение 0, но по-прежнему сообщает об ошибке о невозможности создания дочерних элементов для родителя в другом потоке. Поскольку это статическая функция, я не могу использовать «этот» объект, а без «этого» я не могу получить текущий поток или идентификатор потока. Я думал, что смогу вызвать 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
}