使用 UI 个设计文件并使用带有自定义构造函数 QT 的自定义小部件
Using UI design files and having a custom widget with custom constructor QT
我有 2 个继承自 QGLWidget 的自定义小部件,我的目标是使用这些小部件从 2 个不同的视图显示相同的场景。为此,我将第一个小部件与第二个小部件共享。然而,这需要一个自定义构造函数,而不是编译的 UI 文件提供的。
如
// The line I mention from Compiled UI file
widget_2 = new SideGlWidget(widget);
// What I actually want this line to be
widget_2 = new SideGlWidget(widget, MainScreen);
有人建议稍后使用 init 函数设置此类附加参数。那么如何设置QGLWidget的shareWidget成员呢?
这是 SideGlWidget
的构造函数
SideGlWidget::SideGlWidget(QWidget *parent,QGLWidget * shareWidget)
: QGLWidget(parent,shareWidget)
{
}
欢迎任何评论和编辑。
处理通过 UI 文件生成的 Qt 小部件时,您无法更改调用自定义小部件的构造函数的方式。
那么你有两个选择:
- 为
SideGlWidget
设置默认的第二个参数
- 向您的小部件添加一个
init( sharedWidget)
方法并在 setupUi()
之后调用它(很可能在您的主 window 的构造函数中)。因此,您可以在显示之前将参数传递给侧边小部件。
This forum post解释的很详细
从更高的层次来看你的问题,我建议使用某种共享对象来保存两个小部件的公共数据,并使用继承或组合而不是定义一个小部件来使用另一个小部件。
这是http://doc.qt.io/qt-5/qopenglwidget.html对这个问题的官方最新解决方案:
When multiple QOpenGLWidgets are added as children to the same
top-level widget, their contexts will share with each other. This does
not apply for QOpenGLWidget instances that belong to different
windows.
因此,通过从 QOpenglWidget 而不是 QGlWidget 继承,您根本不必处理上下文共享。请注意,updategl 函数已替换为 update 函数。
我有 2 个继承自 QGLWidget 的自定义小部件,我的目标是使用这些小部件从 2 个不同的视图显示相同的场景。为此,我将第一个小部件与第二个小部件共享。然而,这需要一个自定义构造函数,而不是编译的 UI 文件提供的。 如
// The line I mention from Compiled UI file
widget_2 = new SideGlWidget(widget);
// What I actually want this line to be
widget_2 = new SideGlWidget(widget, MainScreen);
有人建议稍后使用 init 函数设置此类附加参数。那么如何设置QGLWidget的shareWidget成员呢? 这是 SideGlWidget
的构造函数SideGlWidget::SideGlWidget(QWidget *parent,QGLWidget * shareWidget)
: QGLWidget(parent,shareWidget)
{
}
欢迎任何评论和编辑。
处理通过 UI 文件生成的 Qt 小部件时,您无法更改调用自定义小部件的构造函数的方式。
那么你有两个选择:
- 为
SideGlWidget
设置默认的第二个参数 - 向您的小部件添加一个
init( sharedWidget)
方法并在setupUi()
之后调用它(很可能在您的主 window 的构造函数中)。因此,您可以在显示之前将参数传递给侧边小部件。
This forum post解释的很详细
从更高的层次来看你的问题,我建议使用某种共享对象来保存两个小部件的公共数据,并使用继承或组合而不是定义一个小部件来使用另一个小部件。
这是http://doc.qt.io/qt-5/qopenglwidget.html对这个问题的官方最新解决方案:
When multiple QOpenGLWidgets are added as children to the same top-level widget, their contexts will share with each other. This does not apply for QOpenGLWidget instances that belong to different windows.
因此,通过从 QOpenglWidget 而不是 QGlWidget 继承,您根本不必处理上下文共享。请注意,updategl 函数已替换为 update 函数。