[英]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.