2016-05-19 4 views

Antwort

1

-Subklassen der Klasse QTableWidget indem zwei Signale:

class myTableWidget: public QTableWidget 
{ 
    public: 
    myTableWidget() {} 
    ~myTableWidget() {} 

    private: 
    void keyPressEvent(QKeyEvent* event) 
    { 
     if(event->key() == Qt::Key_Up) 
      emit keyUpPressed(); 
     else if(event->key() == Qt::Key_Down) 
      emit keyDownPressed();  
     else 
      QWidget::keyPressEvent(event); 
    } 

    signals : 
     keyUpPressed(); 
     keyDownPressed(); 
}; 

In Ihrer Klasse, wo Sie das Video verwenden, fügen Sie zwei Schlitze (und lassen Sie uns sagen, dass Ihre Klasse yourClass genannt wird):

public slots : 
    void onKeyUpPressed(); 
    void onKeyDownPressed(); 

Jetzt können Sie die Signale und Steckplätze Verbindung in Ihrer Hauptklasse wie folgt verwenden:

myTableWidget* table = new myTableWidget(); 
connect(table, SIGNAL(keyUpPressed()), this, SLOT(onKeyUpPressed())); 
connect(table, SIGNAL(keyDownPressed()), this, SLOT(onKeyDownPressed())); 

Dann können Sie in Ihren Slots Ihr Video verarbeiten.

void yourClass::onKeyUpPressed() 
{ 
    // do something here 
} 

void yourClass::onKeyDownPressed() 
{ 
    // do something else here 
} 

Eine Alternative ist die Installation eines event filter.

EDIT: aus Ihrem Kommentar, Ihre Klasse erbt QStyledItemDelegate so können Sie einfach eventFilter wie dies die Funktion außer Kraft setzen:

bool myTableWidget::eventFilter(QObject *obj, QEvent *event) 
{ 
    if(event->type() == QEvent::KeyPress) 
    { 
     QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); 
     if (keyEvent->key() == Qt::Key_Up) 
      emit keyUpPressed(); 
     else if(event->key() == Qt::Key_Down) 
      emit keyDownPressed(); 
    } 
    // standard event processing 
    return QStyledItemDelegate::eventFilter(obj, event); 
} 

Dann ist es das gleiche für die Schlitze in yourClass ist.

0

Wahrscheinlich möchten Sie eine Verbindung herstellen, um currentCellChanged Signal zu signalisieren das wird sowohl mit Mausklicks und Tastaturbewegung und geben Sie die Indizes der neu ausgewählten Zelle.

1

Um ein Signal von Schlüsselereignis zu fangen Sie von QTableWidget und außer Kraft setzen Methode keyPressEvent(QKeyEvent *event) zum Beispiel erben können:

.H-Datei:

class CustomTableWidget : public QTableWidget 
{ 
    Q_OBJECT 
protected: 
    void keyPressEvent(QKeyEvent *event); 
public: 
    explicit CustomTableWidget(QWidget *parent = 0); 
    ~CustomTableWidget(); 

signals: 
    void upEvent(const QModelIndex &index); 
    void downEvent(const QModelIndex &index); 

CPP-Datei:

void CustomTableWidget::keyPressEvent(QKeyEvent *event) 
{ 
    switch(event->key()) { 
    case Qt::Key_Up: emit upEvent(currentIndex()); 
     break; 
    case Qt::Key_Down: emit downEvent(currentIndex()); 
     break; 
    default: QTableWidget::keyPressEvent(event); 
    } 
} 
Verwandte Themen