1

編集:さて、私は自分で問題を解決しました、これは屈辱的です... MainWindowpyで作成されたインスタンスはありませんでしmain()たが、ウィジェット自体をウィンドウとして使用しました-.-

QGLWidget (Qt バージョン 5.3) を使用して、Qt で OpenGL を少しいじっています。私の問題は次のとおりです。PaintWidgetから派生したクラスがありますQGLWidget。その中で、ステンシル バッファから何らかの値を読み取り、これを 経由でにPaintWidget::mousePressEvent(QMouseEvent*)送信したいと考えています。信号は次のように実装されますemitMainWindow

class PaintWidget : public QGLWidget {
    Q_OBJECT
signals:
    void objectClicked(int id);

public:
    PaintWidget(QWidget* parent = 0);
...
}

メソッドのmousePressEvent外観

void PaintWidget::mousePressEvent(QMouseEvent* event) {   
    GLuint id;
    glReadPixels(event->x(), m_height - event->y(), 1, 1, GL_STENCIL_INDEX, GL_UNSIGNED_INT, &id);
    if (id > 0) {
        emit objectClicked((int)id);
    }
}

この信号を内部のスロットに接続すると、PaintWidgetすべてが期待どおりに機能します。つまり、スロットが呼び出されます。しかし、それを MainWindow のスロットに接続すると、機能しません。のMainWindowコンストラクタは次のとおりです。

MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) {
    m_paintEngine = PaintEngine::instance();
    m_paintWidget = new PaintWidget();
    connect(m_paintWidget, SIGNAL(objectClicked(int)), this, SLOT(dummy(int)));
    setCentralWidget(m_paintWidget);
}

ここでdummyは、パブリック スロットであり、より新しい名前が付けられています。なぜこれが機能しないのですか?

ありがとう、マイケル

4

0 に答える 0