Qt,使用OpenGL,QGLWidget是私有的

时间:2014-10-30 05:29:22

标签: c++ qt opengl

我对Qt很新。我想创建一个简单的应用程序,其中使用OpenGL生成三角形,并使用三个按钮更改该三角形颜色。不幸的是我收到了一个错误:

  

E:\ Programy \ Qt \ 5.3 \ mingw482_32 \ include \ QtOpenGL \ qgl.h:457:错误:' QGLWidget :: QGLWidget(const QGLWidget&)'是私人的        Q_DISABLE_COPY(QGLWidget来绘图)

我不知道该怎么做。这是我的代码:

MainWindow.h

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 w);
    void greenSlot(Widget w);
    void blueSlot(Widget w);

};

MainWindow.cpp中的插槽如下所示:

void MainWindow::redSlot(Widget w)
{
    w.setColor(red);
}

Widget.h

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);

};

枚举颜色只是在另一个头文件中声明的枚举

enum color
{
    red,
    green,
    blue
};

1 个答案:

答案 0 :(得分:2)

您的Slots

void redSlot(Widget w);
void greenSlot(Widget w);
void blueSlot(Widget w);

所有参数都为Widget类型。这会在调用时尝试创建对象的副本。您的WidgetQGLWidget的子类,它具有私有拷贝构造函数,因此无法从子类对象中调用。

由于您想要更改现有对象的颜色而不是其副本,您应该更改函数以获取该对象的指针:

void redSlot(Widget*);
void greenSlot(Widget*);
void blueSlot(Widget*);

void MainWindow::redSlot(Widget* w)
{
    w->setColor(red);
}