尽管我在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:
GLWidget::GLWidget(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
{
makeCurrent();
fbo = new QGLFramebufferObject(512, 512);
timerId = startTimer(20);
}
GLWidget::~GLWidget()
{
glDeleteLists(pbufferList, 1);
delete fbo;
}
void GLWidget::initializeGL()
{....
至于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中的构造函数和析构函数。
我做错了什么?我该如何解决这个问题?
答案 0 :(得分:2)
您是否尝试将中央窗口小部件更改为GL窗口小部件?因为指定GL小部件的父级不会更改它们。如果您想将窗口小部件更改为另一个窗口小部件(使用Designer),我建议使用“提升到”功能,您可以使用该功能在设计器中更改窗口小部件的实际类。因此,在UI上添加一个QWidget,然后将其提升到您的类(GLWidget)。
似乎问题在于GLWidget构造函数中的GLFormat构造函数调用。