現在、Qt アプリケーションを Mac OSX に移植しようとしていますが、次の問題に遭遇しました。
私のウィンドウ クラス (QMainWindow から派生) の 1 つは、閉じるボタンが押されたときにダイアログ ボックスを表示し、変更を保存/破棄したり、中止したりできます。これは、次のように closeEvent を再実装することによって行われます。
void ResultsWindow::closeEvent(QCloseEvent* event)
{
if (isWindowModified())
{
activateWindow();
QMessageBox::StandardButton button = QMessageBox::warning(
this,
APPLICATION_NAME,
"Warning: data have been modified. Do you want to save the "
"changes?",
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Abort,
QMessageBox::Abort);
switch (button)
{
case QMessageBox::Save:
if (!Save())
{
event->ignore();
return;
}
break;
case QMessageBox::Discard:
break;
case QMessageBox::Abort:
default:
event->ignore();
return;
}
}
event->accept();
}
予想される動作は次のとおりです。「中止」をクリックすると、イベントは無視され、ウィンドウは開いたままになります。これは、Linux および Windows で期待どおりに機能します。ただし、OSX では、ウィンドウは非表示になっていますが、バックグラウンドでアクティブになっています。ここで何が欠けていますか?窓が開いたままになるようにするにはどうすればよいですか?
更新:
これは Qt5 の問題だと思います。closeEvent
メソッドが何も構成されていない場合event->ignore();
、ウィンドウはまだ閉じられています。これは意図した動作ではないと思います。この問題を Qt メーリング リストに投稿する必要があるかもしれません…</p>
更新: これは Qt のバグで、バージョン 5.1 以降で解決されています。