1

我有一个 QGLWidget 作为我的应用程序 UI 的一部分。它不是一个中央小部件,它周围还有很多其他小部件。我想在用户单击按钮时全屏显示。类似 youtube video flash player 的功能。

我尝试使用showFullScreen没有效果。

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

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

4

2 回答 2

2

我找到的解决方案:

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_);
}
于 2011-11-16T09:37:37.270 回答
0

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

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

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

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

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

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

  • 在您的子类上捕获键盘事件。当用户按下 Esc 时发出信号
  • 在您的基类中捕获此信号并将其连接到插槽。在此插槽中隐藏全屏 QGlWidget 并将其删除。
于 2011-11-04T12:21:00.233 回答