4

我正在将一些代码从 FLTK 迁移到 QT5,但我似乎无法在图形设计中获得与 OpenGL 上下文相对应的小部件?这样的小部件存在吗?

我从官方来源构建了 QT,使用 OpenGL 选项针对 VS2012x64 并尝试添加QT += opengl到我的 project.pro 文件中。

4

1 回答 1

5

Qt 有 QGLWidget,但您不应该直接在设计器中使用它。相反,您应该在希望 OpenGL 小部件出现的位置放置一个布局。然后你继承 QGLWidget,因为无论如何你必须覆盖这个paintGL函数来绘制一些东西。然后在setupUI()调用之后实例化您的自定义 GL 小部件并将其添加到您放置在设计器中的布局中layoutinstance->addWidget(…)

由于评论而更新

主窗口.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>335</width>
    <height>191</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <layout class="QVBoxLayout" name="verticalLayout"/>
    </item>
   </layout>
  </widget>
  <action name="actionQuit">
   <property name="text">
    <string>&amp;Quit</string>
   </property>
  </action>
 </widget>
 <resources/>
 <connections/>
</ui>

myglwidget.hh

#include <QGLWidget>

class MyGLWidget : public QGLWidget
{ //...
};

主窗口.hh

#include <QMainWindow>

#include "myglwidget.hh"
#include "mainwindow_ui.hh" // generated by uic

class MainWindow : public QMainWindow, Ui_MainWindow
{

    MainWindow(QObject *parent = NULL) : 
        QMainWindow(parent)
    { // one would implement the constructor in the .cc file of course
        this->setupUi(this);
    
        glwidget = new MyGLWidget(this);

        // using the this pointer to emphase the location of the
        // member variable used.
        // NOTE: In the UI we defined a layout names verticalLayout
        this->verticalLayout->addWidget(glwidget);
    }

protected:
    MyGLWidget *glwidget;
};

关键是,您只使用布局。UI 中的普通常规布局,您可以在其中添加派生的 OpenGL 小部件。用户界面中没有变形,没有促销!

于 2013-02-06T23:16:47.363 回答