簡體   English   中英

Qt,使用OpenGL,QGLWidget是私有的

[英]Qt, using OpenGL, QGLWidget is private

我對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
};

您的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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM