簡體   English   中英

在Qt中將子窗口小部件添加到另一個窗口小部件

[英]Adding a child widget to another widget in Qt

盡管我在stackoverflow上發布了類似的問題,但他們的解決方案都沒有真正回應我的問題。 我有兩個獨立的小部件,我想要組合(將一個小部件作為一個小孩插入另一個小部件):一個是僅使用Qt Creator創建的UI(拖放),另一個是在Qt中完成的動畫OpenGL的。 我想在UI中添加動畫,這里是代碼:

glwidget.h(動畫):


class GLWidget : public QGLWidget
{
public:
    GLWidget(QWidget *parent);
    ~GLWidget();
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
    void drawCube(int i, GLfloat z, GLfloat ri, GLfloat jmp, GLfloat amp);
    QGLFramebufferObject *fbo;
};
和glwidget.cpp:

ClaraTeCourseSimulator::ClaraTeCourseSimulator(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ClaraTeCourseSimulator)
{
    ui->setupUi(this);
    defaultAnim = new GLWidget(ui->centralWidget);
}
void ClaraTeCourseSimulator::setupActions()
{
    connect(ui->actionCar_Modelling, SIGNAL(triggered(bool)), ui->centralWidget,
            SLOT(addAnimWidget()));
}
void ClaraTeCourseSimulator::addAnimWidget()
{
    ui->centralWidget->layout()->addWidget(defaultAnim);
}
ClaraTeCourseSimulator::~ClaraTeCourseSimulator()
{
    delete ui;
}
至於UI,我有頭文件:
 class ClaraTeCourseSimulator : public QMainWindow { Q_OBJECT public: explicit ClaraTeCourseSimulator(QWidget *parent = 0); ~ClaraTeCourseSimulator(); private: Ui::ClaraTeCourseSimulator *ui; GLWidget *defaultAnim; protected: void setupActions(); protected slots: void addAnimWidget(); }; 
和.cpp文件:
 ClaraTeCourseSimulator::ClaraTeCourseSimulator(QWidget *parent) : QMainWindow(parent), ui(new Ui::ClaraTeCourseSimulator) { ui->setupUi(this); defaultAnim = new GLWidget(ui->centralWidget); } void ClaraTeCourseSimulator::setupActions() { connect(ui->actionCar_Modelling, SIGNAL(triggered(bool)), ui->centralWidget, SLOT(addAnimWidget())); } void ClaraTeCourseSimulator::addAnimWidget() { ui->centralWidget->layout()->addWidget(defaultAnim); } ClaraTeCourseSimulator::~ClaraTeCourseSimulator() { delete ui; } 

但是當我嘗試運行它時,我得到了大約24個錯誤: 未定義的引用` imp _ZN9QGLFormatD1Ev都指向glwidget.cpp中的構造函數和析構函數。

我究竟做錯了什么? 我該如何解決這個問題?

您是否嘗試將中央窗口小部件更改為GL窗口小部件? 因為指定GL小部件的父級不會更改它們。 如果您想將窗口小部件更改為另一個窗口小部件(使用Designer),我建議使用“提升到”功能,您可以使用該功能在設計器中更改窗口小部件的實際類。 因此,在UI上添加一個QWidget,然后將其提升到您的類(GLWidget)。

似乎問題在於GLWidget構造函數中的GLFormat構造函數調用。

暫無
暫無

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

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