14

次の行を使用して、ダイアログから Qt の X ボタンを無効にしました。

myDialog->setWindowFlags(Qt::Dialog | Qt::Desktop)

しかし、このコードを使用して Alt+を検出できませんでした:F4

void myClass::keyPressEvent(QKeyEvent *e)
{
    if ((e->key()==Qt::Key_F4) && (e->modifiers()==Qt::AltModifier))
        doSomething();
}

QtでAlt+を検出または無効にするにはどうすればよいですか?F4

4

3 に答える 3

29

を押すとAlt+F4、クローズ イベントが最上位ウィンドウに送信されます。ウィンドウ クラスでは、オーバーライドcloseEvent()して無視し、アプリケーションが閉じないようにすることができます。

void MainWindow::closeEvent(QCloseEvent * event)
{
    event->ignore();
}

閉じるボタン (X) を表示したままにしておくと、このメソッドはアプリを閉じることも無効にします。

これは通常、アプリケーションを終了するかどうかを決定する機会を与えるために使用されます。または、「よろしいですか?」メッセージボックス。

于 2012-04-29T05:26:25.077 に答える
6

以下のコードは、Alt+F4、[X]、または Escape を押したときにダイアログが閉じないようにしますが、SomeDialog::close() メソッドを呼び出すことによってはできません。

void SomeDialog::closeEvent(QCloseEvent *evt) {
    evt->setAccepted( !evt->spontaneous() );
}   

void SomeDialog::keyPressEvent(QKeyEvent *evt) {
    // must be overridden but empty if the only you need is to prevent closing by Escape
}   

私たち全員に幸運を祈ります ;)

于 2015-03-25T08:27:39.617 に答える
1

また、ダイアログのクラスでイベントを処理することもできます (少なくともモーダル dlg の場合):

void MyDialog::closeEvent(QCloseEvent* e)
{
    if ( condition )
       e->ignore();
    else
       __super::closeEvent(e);
}
于 2013-10-17T13:47:04.130 に答える