РЕДАКТИРОВАТЬ: Хорошо, я решил проблему сам, это унизительно … Не было ни одного случая MainWindow
создано в пи main()
но я использовал сам виджет в качестве окна -.-
Я немного поиграюсь с OpenGL в Qt, используя QGLWidget (Qt Version 5.3). Моя проблема заключается в следующем: у меня есть класс PaintWidget
что происходит от QGLWidget
, В своем PaintWidget::mousePressEvent(QMouseEvent*)
Я прочитал некоторое значение из буфера трафарета и хочу отправить это через emit
к MainWindow
, Сигнал реализован как
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
это публичный слот, и он называется более новым. Почему это не работает?
Спасибо,
Майкл
Задача ещё не решена.