我想創建一個簡單的應用程序,其中使用OpenGL生成三角形,並使用三個按鈕更改三角形顏色。生成三角形但不幸的是按鈕不工作,我得到的錯誤說:Qt,OpenGL Widget,沒有這樣的插槽
的QObject ::連接:沒有這樣的插槽的MainWindow :: redSlot(OGL)在 .. \ buttonwidget \ mainwindow.cpp:17 QObject :: connect:沒有這樣的插槽 MainWindow :: greenSlot(OGL)in .. \ buttonwidget \ mainwindow.cpp:20 QObject :: connect:沒有這樣的插槽MainWindow :: blueSlot(OGL)在 .. \ buttonwidget \ mainwindow.cpp:23
我有插槽定義:
void MainWindow::redSlot(Widget* w)
{
w->setColor(red);
}
void MainWindow::greenSlot(Widget* w)
{
w->setColor(green);
}
void MainWindow::blueSlot(Widget* w)
{
w->setColor(blue);
}
它們正在改變在Widget類中聲明的變量,這些變量改變了生成的三角形的顏色。這裏有一流的Widget:
class Widget : public QGLWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
QSize minimumSizeHint() const;
QSize sizeHint() const;
enum color c;
void setColor(enum color color1);
protected:
void initializeGL();
void paintGL();
void resizeGL(int width, int height);
};
然後我在課堂上插槽連接按鈕主窗口構造函數:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
layout = new QVBoxLayout();
QWidget *w = new QWidget();
setCentralWidget(w);
w->setLayout(layout);
Widget *OGL = new Widget();
//OGL->c=green; - it was a test whether changing value of enum type variable c works
//it works, changing it changes the color of a generated triangle
redButton = new QPushButton(tr("Red"));
connect(redButton, SIGNAL(clicked()), this, SLOT(redSlot(OGL)));
greenButton = new QPushButton(tr("Green"));
connect(greenButton, SIGNAL(clicked()), this, SLOT(greenSlot(OGL)));
blueButton = new QPushButton(tr("Blue"));
connect(blueButton, SIGNAL(clicked()), this, SLOT(blueSlot(OGL)));
layout->addWidget(OGL);
layout->addWidget(redButton);
layout->addWidget(greenButton);
layout->addWidget(blueButton);
}
下面是標題時隙聲明:
class MainWindow : public QMainWindow
{
Q_OBJECT
QVBoxLayout *layout;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QPushButton *redButton;
QPushButton *greenButton;
QPushButton *blueButton;
public slots:
void redSlot(Widget*);
void greenSlot(Widget*);
void blueSlot(Widget*);
};
我應該如何使他們的工作?
你把聲明之前的插槽關鍵字在'MainWindow'頭,如果你沒有做一個乾淨和重建 – 2014-10-30 10:20:20
我用Qt已經有一段時間了,但我依稀記得這個錯誤。你是否正確使用MOC編譯器?您是否正確定義了您的插槽(使用標題中的「public slot:」)? – kroneml 2014-10-30 10:21:23
我建議你在遇到這樣的問題之前學習一些Qt基礎知識:http://qt-project.org/doc/qt-5/signalsandslots.html。如果你遇到了一些問題,你應該提供一個完整的代碼的SSCCE,它完全描述你的問題,而不是從你的真實項目中發佈一些代碼片段。 – 2014-10-30 10:26:14