Qt

2010-06-23 29 views
24

'da fare tıklatma anahtarı nasıl bulunur? QTableWidget var ve bir sütun üstbilgisini tıklatırken CTRL'ye basmak tüm sütunu işaretler. Sütun dizini almak için sorun değil çünkü bana sectionPressed sinyalini tıkladı. Bir sütun tıklandığında herhangi bir klavye değiştiricisinin durumunu nasıl alabilirim?Qt

cevap

28

deneyin Her zaman kullanılabilir

Qt 5'de QGuiApplication::keyboardModifiers()'u deneyin.

+0

hepsini buldum – tfl

+0

ŞİMDİ Ben bu yanıtı yanıltmak! Herşeyi dağınık bir alt sınıf olarak yeniden yazdıktan sonra 'olay' nesnesine ulaşabilirdim :-) D'oh! –

+0

@Freedom_Ben ile benzer Ben de alt sınıf veya olay filtresi öneren tüm örneklere bakıyordum ... ama bu cevabı bulduğum benim sebat (teşekkürler tembellik olabilir: P). Bir çekicilik gibi çalışır ... İstediğim gibi EXACTLY! Yardımı için teşekkürler Roku! – zeFree

7

Klavye değiştirici tuşlarının durumu, QInputEvent öğesinden devralınan değiştiriciler() işlevini çağırarak bulunabilir.

http://doc.qt.io/qt-5/qmouseevent.html

+0

biliyorum ama ilişkili yuvasına içinde hiçbir nesne diğer ardından sütun indeksi sectionPressed gerekiyor. Olay yok, gönderen yok, hiçbir şey yok. – tfl

+0

Belki de, değiştiricilerin durumunu mouseReleaseEvent içinde, sinyalden önce gerçekleşmesi gereken şekilde kaydedebilirsiniz. –

3

bu gerçekten sinir bozucu, çok

gibi basılmış bir eventfilter yükleyip Bir anahtarın Hava kontrol edebilirsiniz eventfilter içinde işleyicisi

ui->tableWidget->horizontalHeader()->viewport()->installEventFilter(this); 

sectionPressed kaldırmak zorunda

bool MainWindow::eventFilter(QObject *object, QEvent *event) 
{ 
    if(event->type() == QEvent::MouseButtonPress) 
    { 
     if(Qt::ControlModifier == QApplication::keyboardModifiers()) 
     { 
      QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); 
      if(mouseEvent) 
      { 
       if(mouseEvent->button()== Qt::LeftButton) 
       { 
        ui->tableWidget->selectColumn(ui->tableWidget->itemAt(mouseEvent->pos())->column()); 
        return true; 
       } 
      } 
     } 
    } 

    return QWidget::eventFilter(object,event); 
} 
2

Bu benim için çalışır.

if (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) { 
4

Sen kullanımı daha basit olan QGuiApplication::queryKeyboardModifiers() kullanabilirsiniz:

if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier)) 
{ 
    // Do a few things 
}