gpt4 book ai didi

c++ - Qt,使用OpenGL,QGLWidget是私有(private)的

转载 作者:行者123 更新时间:2023-11-28 02:38:56 29 4
gpt4 key购买 nike

我是 Qt 的新手。我想创建一个简单的应用程序,其中有一个使用 OpenGL 生成的三角形和三个改变三角形颜色的按钮。不幸的是我得到一个错误:

E:\Programy\Qt\5.3\mingw482_32\include\QtOpenGL\qgl.h:457: error: 'QGLWidget::QGLWidget(const QGLWidget&)' is private Q_DISABLE_COPY(QGLWidget)

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

主窗口.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);
}

小部件.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
};

最佳答案

您的插槽

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

都采用类型为 Widget 的参数。这会尝试在调用时创建对象的拷贝。您的 WidgetQGLWidget 的子类,它具有私有(private)复制构造函数,因此不能从子类对象调用。

如果您想更改现有对象的颜色而不是它的拷贝,您应该更改函数以获取该对象的指针:

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

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

关于c++ - Qt,使用OpenGL,QGLWidget是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26645718/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com