내 MainWindow에는 신호가 모두 동일한 슬롯에 연결된 푸시 버튼과 메뉴 막대 항목이 있습니다. 슬롯 함수에서 나는 다음과 같이 쓴다 :Qt 메인 윈도우에서 커서를 메뉴 동작에서 변경할 수 없습니다.
mainWindow->setCursor(QCursor(Qt::WaitCursor));
이것은 슬롯 기능이 버튼을 통해 호출 될 때 예상대로 작동한다. 그러나 메뉴에서 동일한 기능이 호출되면 대기 커서가 나타나지 않습니다. 왜 그런가?
QApplication :: setOverrideCursor; 그러나 다른 문제가 발생합니다.
어떤 권장 사항이 있습니까? 감사!
(I Qt는 4.7을 사용하고 기본는 MinGW 컴파일러 Qt는 창조주를 사용하여 Windows 7에 내 개발을하고있는 중이 야.)
여기 자세한 내용입니다. 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
가 버튼 '호출하면, 대기 커서가 표시된다 MainWindow를 생성자
'action'을 통해 showMessageBox
을 호출하면 대기 커서가 나타나지 않습니다. 대신 사용자가 'action'메뉴 항목을 선택하자 마자 커서가 Qt :: CrossCursor에서 Qt :: ArrowCursor로 바뀌고 메시지 상자가 열리면 Qt :: PointingHandCursor로 바뀝니다. 대기 커서가 나타나지 않습니다.
setOverrideCursor를 사용하여 문제가 무엇입니까? – Exa
오, 더 많은 코드를 게시 할 수 있습니까? 어쩌면 문제는 이미 연결 매크로에서 발생하고 있습니다. – Exa
동작을 재생산하는 몇 가지 샘플 코드가 포함되도록 게시물을 확장했습니다. setOverrideCursor를 사용하여 발견 된 불편은 대기 커서를 표시하는 함수에서 메시지 상자를 표시해야하는 경우 waitOscideCursor와 함께 대기 커서를 일시적으로 제거해야한다는 것입니다. 그렇지 않으면 대기 커서가 대화 상자에도 나타납니다. 또한 약간의 깜박임을 피하기 위해 Qt 생성 대화 상자 (QFileDialog :: getOpenFileName)를 표시 할 때도 동일한 작업을 수행해야합니다. –