J'ai donc QMainWindow
classe de type qui décrit par le code suivant:Comment empêcher les objets QWidgets ou QDialog de prendre en charge des événements clés à partir de QMainWindow une fois que la boîte de dialogue a été cliquée par la souris?
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void closeEvent(QCloseEvent *);\
DimensionDialog *newResolution;
Ui::MainWindow *ui;
ImageInteraction *liveVideo;
ImageInteraction *modifiedVideo;
CameraControl *cameraControl;
QPushButton *pushToTalk;
QPushButton *audioSettingsSetup;
AudioSettings *audioSettings;
QPushButton *numberOfRunningThreads;
protected:
void keyPressEvent(QKeyEvent * event);
void keyReleaseEvent(QKeyEvent * event);
private slots:
void restartVideoWithNewResolution(int, int);
};
De là, vous pouvez voir que cette classe ne gère certains événements clés.
Comme vous pouvez le voir, cette classe a également des membres DimensionDialog
et CameraControl
, qui sont respectivement QDialog
et QWigdet
classes de type. Maintenant, ces deux membres ont aussi leurs propres emplacements, qui sont appelés lorsque certains boutons sont enfoncés. Le problème est que lorsque l'un de ces boutons est enfoncé, la classe correspondante (DimesionDialog
ou CameraControl
) prend en charge les événements de clé et la classe MainWindow
ne peut plus saisir les événements de clé.
Je n'arrive pas à comprendre pourquoi cela se passe. Comment puis-je empêcher cela? Je veux que l'événement clé soit géré uniquement par le MainWindow
.
Merci.
Avez-vous joué avec grabKeyboard? http://doc.qt.io/qt-4.8/qwidget.html#grabKeyboard – bibi
merci, je ne savais pas à ce sujet. Ça aide. –
Utilisez [installEventFilter] (http://doc.qt.io/qt-4.8/qobject.html#installEventFilter) pour empêcher la boîte de dialogue de recevoir cet événement, puis de l'envoyer à votre fenêtre principale. – Zen