#c #qt #qthread
#c #qt #qthread
Вопрос:
Я пытаюсь использовать новый поток для выполнения некоторых запросов и обработки данных с некоторых веб-сайтов, но когда я запускаю поток в главном окне, графический интерфейс не отображается (я ничего не вижу).
Вот часть соответствующего кода:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableView->setModel(amp;shopItems);
QThread thread;
thread.setObjectName("thread");
a.address = ui->address;
a.Filter = ui->filter;
a.browsers = ui->browsers;
a.excel = ui->excel;
a.shopItems = amp;shopItems;
a.moveToThread(amp;thread);
connect(ui->dataPull, SIGNAL(clicked()), amp;a, SLOT (pull_data()));
connect(ui->excel, SIGNAL(clicked()), this, SLOT(export_to_excel()));
connect(ui->stop, SIGNAL(clicked()), this, SLOT(Stop()));
//thread.start();
//thread.wait();
}
Я думаю, это происходит потому, что, когда я использую thread.start() цикл событий переносится в новый поток.
Есть идеи, как запустить новый другой поток, сделав основной поток запущенным и отзывчивым?
Комментарии:
1. Ваш
QThread
имеет локальную область видимости вMainWindow
конструкторе и будет уничтожен, как только конструктор завершится. ПопробуйтеQThread
вместо этого создатьMainWindow
элемент a .2. Из ссылки на
QThread
деструктор : «Удаление запущенного QThread … приведет к сбою программы «. Поэтому, если вы запустите поток и не дождетесь его завершения (а ожидание остановит всю программу), ваша программа завершится сбоем. Действительно, вместо этого определите поток как членMainWindow
класса.3. Да, я сделал QThread членом MainWindow, и он работает