Qt-creator: мой QMessageBox не закрывается

Я использую QMessageBox, чтобы предупредить пользователя, если он по ошибке нажал кнопку Удалить. когда пользователь нажимает кнопку «ОК» в QMessageBox, вызывается функция для удаления строки из QTableView (которая подключена к базе данных). после удаления следует обновить QTableView и отобразить новые данные (без удаленной строки).

теперь, когда пользователь нажимает Delete button, появляется предупреждение QMessageBox. затем, когда он нажимает «ОК», строка удаляется из QTableView. в этот момент я ожидаю, что QMessageBox исчезнет, ​​и будет показана новая обновленная версия QTableView, чего не происходит !!. вместо этого снова появляется QMessageBox, и обновление необходимо выполнить вручную (поскольку я только запускаю приложение). Почему это происходит?

вот мой код:

QMessageBox msg;
msg.setIcon(QMessageBox::Warning);
msg.setText("Delete");
msg.setInformativeText("continue ?");
msg.setDetailedText("Delete permanently");
msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msg.setDefaultButton(QMessageBox::Cancel);

int ret = msg.exec();
if(ret == 1024){
    msg.Close;
    deleteDataBaseRecord(); // connect to server and delete DB data which is then show the QTableView again
}
else {
    msg.Close;
}

person hashDefine    schedule 17.06.2013    source источник


Ответы (2)


У вас нет () в ваших вызовах Close... это действительно C++?

Не используйте ключевые слова (удалить) в качестве имен функций.

Кроме того, не используйте константы (1024), когда есть доступные имена.

person rivimey    schedule 17.06.2013
comment
1- в Close нет any(), и да это c++. 2- Я поставил Удалить для простоты, но в реальном коде он называется по-другому. 3- Я не могу изменить возвращаемый int, он уже определен, так как при нажатии OK вы получите int 1024, и я просто использую его - person hashDefine; 17.06.2013

Вы должны позвонить msg.close() (без заглавной C), чтобы закрыть окно сообщения msg.

Кроме того, возвращаемое значение метода QMessageBox::exec() может быть QMessageBox::Ok, если была нажата кнопка OK. Собственно, QMessageBox::Close (в вашем случае msg.Close) может быть одной из этих кнопок.

person hluk    schedule 18.06.2013