QWidget comment recevoir événement keypressevent à l'intérieur de widgets enfants
J'ai été l'une des principales Widget
et à l'intérieur de ce widget, j'ai QListWidget
et deux boutons. J'ai remplacer le keyPressEvent
à l'intérieur du widget principal (héritée de QWidget
). Je peux recevoir le keyPress
événements lorsque le focus n'est pas sur QListWidget
, mais lorsque le focus se trouve à l'intérieur de la QListWidget
je ne suis pas en mesure de recevoir ces keyPress
événements. Ci-dessous le code que j'ai utilisé pour ce faire:
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);
}
Que voulez-vous faire avec les touches?
OriginalL'auteur gmuhammad | 2014-10-14
Vous devez vous connecter pour publier un commentaire.
Dans l'en-tête:
Dans le constructeur:
Filtre:
Avec ce filtre d'événement vous pouvez prendre tous les principaux événements de presse et de vérifier qui émettent de l'événement (
obj
)Par exemple:
En conséquence à votre commentaire:
Vous devez installer le filtre à qApp. Dans ce cas, tous qApp événements seront traitées par votre mainWindow. Si vous souhaitez installer le filtre seulement pour listWidget vous devez créer un autre sous-classe QObject et installer cette sous-classe comme filtre d'événements pour votre widget. Il existe de nombreux exemples, comment le faire, mais dans ce cas, vous devez fournir quelque chose qui vous permet de communiquer avec votre mainWindow(si vous souhaitez utiliser cet événement dans votre mainWindow) Mais avec eventFilter dans ma réponse, vous ne devriez pas sous-classe quelque chose et écrire la communication entre les 2 classes. Elle est prête à travailler
Je veux juste pour gérer les événements de pression de Touche uniquement sur listWidget ou vous pouvez dire que certains widget spécifique. Permet de dire que la liste contient des noms de fichiers ou les noms d'images. Ainsi, lorsque l'utilisateur sélectionne un certain nombre d'image/fichier je vais afficher les détails de l'image/fichier dans un autre widget. Bien que la sélection des événements de changement est suffisant, mais le changement de ne pas appeler en cas de l'utilisateur sélectionne un élément de touches up/down. J'espère que vous comprenez mon point.
J'ai compris. Voir mon edit s'il vous plaît. Il peut faire exactement ce que vous voulez.
OriginalL'auteur Chernobyl
Vous devez utiliser les filtres d'événement.
OriginalL'auteur Max Go