如何全屏显示QGLWidget?

发布于 2024-12-13 19:26:46 字数 493 浏览 3 评论 0原文

我有一个 QGLWidget 作为我的应用程序 UI 的一部分。它不是一个中心小部件,它周围还有很多其他小部件。我想在用户单击按钮时全屏显示它。与 YouTube 视频 Flash 播放器类似的功能。

我尝试使用 showFullScreen 但没有效果。

我已阅读 how-to-fullscreen-a-qglwidgetfullscreen-widget,但他们建议使用 showFullScreen。

Qt 文档指出,要使用 showFullScreen 小部件必须是一个独立的窗口。所以我认为应该有一些技巧。

I have a QGLWidget as part of the UI of my application. It is NOT a central widget, there are a lot of others widgets around it. I want to show it full screen on user clicks the button. Similar functionality like on youtube video flash player.

I have tried to use showFullScreen with no effect.

I have read how-to-fullscreen-a-qglwidget and fullscreen-widget, but they suggest using showFullScreen.

Qt documentation states that for using showFullScreen widget must be an independent window. So I assume there should be some trick for this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时间海 2024-12-20 19:26:46

我找到的解决方案:

void MyApp::on_fullscreen_button_clicked() {
    QDialog *dlg = new QDialog(this);
    QHBoxLayout *dlg_layout = new QHBoxLayout(dlg);
    dlg_layout->setContentsMargins(0, 0, 0, 0);
    dlg_layout->addWidget(glwidget_);
    dlg->setLayout(dlg_layout);
    dlg->showFullScreen();

    bool r = connect(dlg, SIGNAL(rejected()), this, SLOT(showGlNormal()));
    assert(r);
    r = connect(dlg, SIGNAL(accepted()), this, SLOT(showGlNormal()));
    assert(r);
}

void MyApp::showGlNormal() {
    ui.glBox->layout()->addWidget(glwidget_);
}

The solution I found:

void MyApp::on_fullscreen_button_clicked() {
    QDialog *dlg = new QDialog(this);
    QHBoxLayout *dlg_layout = new QHBoxLayout(dlg);
    dlg_layout->setContentsMargins(0, 0, 0, 0);
    dlg_layout->addWidget(glwidget_);
    dlg->setLayout(dlg_layout);
    dlg->showFullScreen();

    bool r = connect(dlg, SIGNAL(rejected()), this, SLOT(showGlNormal()));
    assert(r);
    r = connect(dlg, SIGNAL(accepted()), this, SLOT(showGlNormal()));
    assert(r);
}

void MyApp::showGlNormal() {
    ui.glBox->layout()->addWidget(glwidget_);
}
讽刺将军 2024-12-20 19:26:46

showFullScreen 函数仅适用于 Windows。来自 Qt 文档:

窗口是一个在视觉上不是任何其他小部件的子部件的小部件
通常有一个框架和一个窗口标题。

一个可能的解决方案如下:

当用户单击“显示全屏”按钮时

  • 创建一个新的 QGlWidget 没有父级 并将其设置为 QGlWidget 的内容
  • 在其上使用 showFullScreen 函数...

也许它更好的主意是子类化 QGlWidget 并在其构造函数中传递一个指向另一个 QGlWidget 的指针。构造函数应该获取所提供的小部件的上下文并将其应用于新的小部件。

  • 在你的子类上捕获键盘事件。当用户按 Esc 时发出一个信号,
  • 在您的基类中捕获该信号并将其连接到插槽。在此槽中隐藏全屏 QGlWidget 并将其删除。

The showFullScreen function works only on windows. From the Qt documentation:

A window is a widget that isn't visually the child of any other widget
and that usually has a frame and a window title.

A possible solution is the following:

When the user clicks the show full screen button

  • Create a new QGlWidget with no parent and set to it the contents of you QGlWidget
  • Use the showFullScreen function on it...

Maybe it is a better idea to subclass QGlWidget and pass in its constructor a pointer to another QGlWidget. The constructor should take the context of the provided widget and apply it to the new one.

  • On your subclass catch keyboard events. When the user press Esc emit a signal
  • In your base class catch this signal and connect it to a slot. In this slot hide the full screen QGlWidget and delete it.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文