我对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
};
答案 0 :(得分:2)
您的Slots
void redSlot(Widget w);
void greenSlot(Widget w);
void blueSlot(Widget w);
所有参数都为Widget
类型。这会在调用时尝试创建对象的副本。您的Widget
是QGLWidget
的子类,它具有私有拷贝构造函数,因此无法从子类对象中调用。
由于您想要更改现有对象的颜色而不是其副本,您应该更改函数以获取该对象的指针:
void redSlot(Widget*);
void greenSlot(Widget*);
void blueSlot(Widget*);
void MainWindow::redSlot(Widget* w)
{
w->setColor(red);
}