QWidget wie erhalten keyPressEvent innen-Kind-widgets
Ich habe eine Haupt - Widget
und innerhalb dieses Haupt-widget habe ich QListWidget
und zwei Tasten. Ich habe das überschreiben der keyPressEvent
innerhalb der main-widget (geerbt von QWidget
). Ich kann erhalten die keyPress
Veranstaltungen, wenn sich der Fokus nicht auf QListWidget
, aber wenn sich der Fokus innerhalb der QListWidget
ich bin nicht in der Lage zu erhalten, diese keyPress
Veranstaltungen. Unten ist der code, den ich verwendet haben, um dies zu erreichen:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setFocusPolicy(Qt::StrongFocus);
ui->listWidget->addItem(new QListWidgetItem("Item1"));
ui->listWidget->addItem(new QListWidgetItem("Item2"));
ui->listWidget->addItem(new QListWidgetItem("Item3"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
qDebug() << "event->key(): " << event->key();
QWidget::keyPressEvent(event);
}
Was willst du mit dem Schlüssel drückt?
InformationsquelleAutor gmuhammad | 2014-10-14
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Kopfzeile:
Im Konstruktor:
Filter:
Mit diesem Ereignis-filter können Sie die catch-all-Taste drücken Sie auf Ereignisse und überprüfen, wer ist emit Ereignis (
obj
)Beispiel:
Entsprechend zu Ihrem Kommentar:
Installieren Sie filter, um qApp. In diesem Fall werden alle qApp-Ereignisse verarbeitet werden, die von Ihrem Hauptfenster. Wenn Sie möchten, installieren Sie filter, nur für listWidget sollten Sie ein anderes QObject Unterklasse und installieren diese Unterklasse event-filter auf Ihrem widget. Es gibt viele Beispiele, wie es zu tun, aber in diesem Fall sollten Sie etwas, das ermöglicht Ihnen die Kommunikation mit Ihrem mainWindow(wenn Sie möchten, verwenden Sie dieses Ereignis in Ihrem mainWindow), Aber mit eventFilter in meiner Antwort, sollten Sie nicht Unterklasse etwas schreiben und die Kommunikation zwischen 2 Klassen. Es ist bereit zu arbeiten
Ich will einfach zu handhaben KeyPress-Ereignisse, die nur auf listWidget oder Sie können sagen, einige spezielle widgets. Sagen wir, die Liste enthält Dateinamen oder dem Namen des Bildes. Also, wenn der Benutzer wählt etwas bestimmtes Bild/Datei werde ich die Detail-Anzeige der Bild - /Datei in ein anderes widget. Obwohl die Auswahl change-Ereignis ist ausreichend, aber die Auswahl ändern Sie nicht aufrufen, falls der Anwender wählt ein Element aus up - /down-Tasten. Ich hoffe, Sie verstehen meinen Punkt.
Habe ich verstanden. Siehe mein edit bitte. Es kann genau das tun, was Sie wollen.
InformationsquelleAutor Chernobyl
Müssen Sie Ereignis Filter.
InformationsquelleAutor Max Go