1

アプリケーションのUIの一部としてQGLWidgetを使用しています。それは中心的なウィジェットではありません、その周りには他にもたくさんのウィジェットがあります。ユーザーがボタンをクリックしたときに全画面表示したい。YouTubeビデオフラッシュプレーヤーのような同様の機能。

showFullScreenを効果なしで使用しようとしました。

私はhow-to-fullscreen-a-qglwidgetとfullscreen -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関数は、ウィンドウでのみ機能します。Qtのドキュメントから:

ウィンドウは、視覚的には他のウィジェットの子ではなく、通常はフレームとウィンドウ タイトルを持つウィジェットです。

考えられる解決策は次のとおりです。

ユーザーが全画面表示ボタンをクリックしたとき

  • 親なしで新しい QGlWidget を作成し、それに QGlWidgetのコンテンツを設定します
  • その上でshowFullScreen関数を使用してください...

QGlWidget をサブクラス化し、そのコンストラクターに別の QGlWidget へのポインターを渡すことをお勧めします。コンストラクターは、提供されたウィジェットのコンテキストを取得し、それを新しいウィジェットに適用する必要があります。

  • サブクラスで、キーボード イベントをキャッチします。ユーザーが Esc を押すと、シグナルが送信されます
  • 基本クラスでこのシグナルをキャッチし、スロットに接続します。このスロットで、全画面表示の QGlWidget を非表示にして削除します。
于 2011-11-04T12:21:00.233 に答える