2012-04-29 22 views
13

Bu hattı kullanarak iletişim kutusundan Qt engelli X düğmesine ettik:Alt + F4 penceresini Qt kullanarak nasıl kapatabilirim?

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

ama bu kodu kullanarak Alt + F4 bulamadık:

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

neyi Alt + F4'u algılamalı veya Qt'de devre dışı bırakmalı mıyım?

cevap

24

Alt+F4 tuşlarına basılması, en üst düzey pencerenize gönderilecek yakın bir sonuçla sonuçlanır. Pencere sınıfınızda, yok saymak ve uygulamanızın kapanmasını önlemek için closeEvent()'u geçersiz kılabilirsiniz.

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

Kapat düğmesinin (X) görünmesini sağladıysanız, bu yöntem uygulamanızı kapatmasını da engeller.

Bu, genellikle, uygulamanın "Emin misiniz?" Ifadesini görüntüleyerek kapatmak isteyip istemediğini veya sormasını istemeye karar vermesi için kullanılır. mesaj Kutusu. ,

void MyDialog::closeEvent(QCloseEvent* e) 
{ 
    if (condition) 
     e->ignore(); 
    else 
     __super::closeEvent(e); 
} 
0

Ayrıca size iletişim'ın sınıfında olayı işleyebilir (en azından o modal dlg ise) SomeDialog :: close() yöntemini arayarak değil. hepimize

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 
} 

iyi şanslar;)

3

kod aşağıda Alt + F4 basılı bir iletişim kapanış önler [X] veya Escape ama:

+0

İki hataları var: o Press' değil 'Pressed' ve tip farklıdır' keyPressEvent (QKeyEvent * evt) '' dır. Ama bu düzeltme uygulandığında ... iyi çalışıyor. :) –

+0

Sadece keyPressEvent (QKeyEvent * evt) 'i geçersiz kılarak ve boş bırakarak çalışmama gibi başka sorunlara neden olabilir. Örneğin, kullanıcının Enter tuşuna basmaya devam etmesine izin vermek istediğimizde, gerekli olabilecek anahtar davranışı girin. Dolayısıyla, bu gibi özel durumlarda açıkça izin vermek istemediğimiz anahtarları tanımlamak çok daha iyidir. Ya da, başka bir deyişle, BaseWidget'ın (devredışı QDidog, QDialog, vb olabilir) BaseWidget :: keyPressEvent (evt) olarak adlandırılması önerilir. –

İlgili konular