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");
}
Мои вопросы:
- Какая проблема, которая, я уверен, рано или поздно у меня возникнет из-за этого сообщения?
- Как избавиться этого, продолжая использовать std::thread ?
Подробнее здесь: https://stackoverflow.com/questions/787 ... -in-a-diff