QProcess и std::thread — невозможно создать дочерние элементы для родителя, находящегося в другом потоке.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 QProcess и std::thread — невозможно создать дочерние элементы для родителя, находящегося в другом потоке.

Сообщение Anonymous »

Я получаю сообщение во время выполнения

QObject: невозможно создать дочерних элементов для родителя, который находится в другом потоке.

при запуске QProcess в std::thread. Программа работает, но я чувствую, что это сообщение в конечном итоге приведет к проблемам.
Я видел этот и другие ответы (а также некоторые на Python), которые я не видел, как применить к моему коду.
Я использую QtCreator, Qt 6.5 LTS и gcc 11.2.0 в Win10. Минимальный рабочий пример приведен ниже. Вам придется создать пустое окно графического интерфейса с помощью кнопки QPushButton. Определение класса:

Код: Выделить всё

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private slots:
void clicked(bool);

private:
Ui::MainWindow *ui;

void launchNotepad();

std::thread th;
QProcess process;
};
И реализация:

Код: Выделить всё

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(clicked(bool)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::clicked(bool)
{
th = std::thread{&MainWindow::launchNotepad,this};
th.detach();
}

void MainWindow::launchNotepad()
{
process.start("notepad");
}
Когда я нажимаю на кнопку, блокнот действительно появляется, и все выглядит хорошо. Но консоль вывода приложения в QtCreator выдает сообщение «Невозможно создать дочерние элементы...». По причинам, выходящим за рамки этого вопроса, я хочу работать с std::thread.
Мои вопросы:
  • Какая проблема, которая, я уверен, рано или поздно у меня возникнет из-за этого сообщения?
  • Как избавиться этого, продолжая использовать std::thread ?


Подробнее здесь: https://stackoverflow.com/questions/787 ... -in-a-diff
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»