【问题标题】:How to propagate keyPressEvent on different qt QMainWindow如何在不同的qt QMainWindow上传播keyPressEvent
【发布时间】:2011-04-24 07:25:34
【问题描述】:

我有 2 个不同的 QMainWindow,第一个是第二个的父级。我想在子窗口中按一些键并在父窗口中传播事件。我为每个人创建了函数 void keyPressEvent(QKeyEvent* event);但是当我按下孩子的键时,事件不会传播给父母。为什么?

这是代码...

//父类.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>
#include "test.h"
#include <QDebug>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void keyPressEvent(QKeyEvent* event);
private:
    Ui::MainWindow *ui;
    test *form;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

//父类.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    form = new test(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent* event)
{
    qDebug() << event->text();
}

void MainWindow::on_pushButton_clicked()
{
    form->show();
}

//儿童类.h

#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include <QKeyEvent>
namespace Ui {
    class test;
}

class test : public QMainWindow
{
    Q_OBJECT

public:
    explicit test(QWidget *parent = 0);
    ~test();
protected:
    void keyPressEvent(QKeyEvent* event);
private:
    Ui::test *ui;
};

#endif // TEST_H

//儿童类.cpp

#include "test.h"
#include "ui_test.h"

test::test(QWidget *parent) :  QMainWindow(parent),  ui(new Ui::test)
{
    ui->setupUi(this);
}

test::~test()
{
    delete ui;
}

void test::keyPressEvent(QKeyEvent* event)
{
  qDebug() << event->text();
  event->ignore();

}

【问题讨论】:

    标签: events qt qt4 keypress


    【解决方案1】:

    QMainWindow 是一个顶级窗口,通常是事件传播结束的地方。我不完全清楚当一个顶级窗口是父级时可能是什么规则。根据你的结果,我不得不假设它成立。

    无论如何,您应该能够通过在MainWindow 类中定义过滤器方法并将其安装在test 类上来获取事件。参考this documentation

    您还可以选择覆盖QApplicationevent() 方法。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2014-08-10
      • 2017-02-14
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多