В моем главном окне у меня есть кнопка и пункт меню, сигналы которого подключены к одному и тому же слоту. В слот-функции я написал:
mainWindow->setCursor(QCursor(Qt::WaitCursor));
Работает как положено, когда функция слота вызывается кнопкой; однако, когда та же функция вызывается из меню, курсор ожидания не появляется. Есть идеи почему?
Я также рассмотрел использование QApplication :: setOverrideCursor; однако это вызывает другие проблемы.
Есть какие-нибудь рекомендации? Спасибо!
(Я использую Qt 4.7 и занимаюсь разработкой под Windows 7 с использованием Qt Creator со стандартным компилятором MinGW.)
Вот более подробно.
в конструкторе MainWindow: this->setCursor(Qt::CrossCursor);
Сигнальные / слотные соединения:
QObject::connect(button, SIGNAL(clicked()), MainWindow, SLOT(showMessageBox()));
QObject::connect(action, SIGNAL(triggered()), MainWindow, SLOT(showMessageBox()));
функция showMessageBox:
void MainWindow::showMessageBox()
{
this->setCursor(Qt::WaitCursor);
// display wait cursor briefly before showing message box
for (int i = 0; i < 1<<30; ) {++i;}
QMessageBox msgBox;
msgBox.setText("Hello!");
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.setCursor(Qt::PointingHandCursor);
msgBox.exec();
this->setCursor(Qt::CrossCursor);
}
Когда showMessageBox
вызывается с помощью кнопки, курсор ожидания отображается, как и ожидалось.
Когда showMessageBox
вызывается через «действие», курсор ожидания не появляется; вместо этого курсор изменится с Qt :: CrossCursor на Qt :: ArrowCursor, как только пользователь выберет пункт меню «действие», а затем изменится на Qt :: PointingHandCursor, как только откроется окно сообщения. Курсор ожидания никогда не появляется.