Я хочу обработать свою кнопку следующим образом:
- Изменить текст на этикетке (что-то вроде «Пожалуйста, подождите ...»)
- Загрузить некоторые данные из базы данных
- Когда загрузка будет завершена, закройте диалоговое окно, где находится эта кнопка.
Когда я сделаю это:
void LoadingDialog::on_pushButton_clicked()
{
m_ui->labelStatus->setText("Pobieranie wysyłek...");
if(m_methodToDo == MethodToDo::LoadShipment)
{
if(DataManager::getManager()->loadShipments())
{
this->close();
}
}
}
метка не изменила текст, занимает несколько секундlag (загружает несколько k записей) и диалоговое окно закрывается.
Когда я пытаюсь это сделать:
void LoadingDialog::changeStatus(QString status)
{
m_ui->labelStatus->setText(status);
}
bool LoadingDialog::load()
{
if(m_methodToDo == MethodToDo::LoadShipment)
{
if(DataManager::getManager()->loadShipments())
{
this->close();
}
}
}
void LoadingDialog::on_pushButton_clicked()
{
QFuture<void> future3 = QtConcurrent::run([=]() {
changeStatus("Pobieranie wysyłek..."); // "Downloading.."
});
QFuture<void> future = QtConcurrent::run([=]() {
load();
});
}
метка имеет текст изменения - это нормально, несколько секунд лага - это нормальноно диалоговое окно не закрывается, и мое приложение выдает исключение:
Cannot send events to objects owned by a different thread. Current thread 229b1178. Receiver 'Dialog' (of type 'LoadingDialog') was created in thread 18b00590
Есть предложения?