7

フローティング (ドッキング解除) QDockWidget をフルスクリーン モードにしようとしています。Windows では、すべてが簡単に見えます。たとえば、dockwidget (dw) の topLevelChanged() シグナルをカスタム スロット floatingChanged() に接続します。

connect(dw, SIGNAL(topLevelChanged(bool)), this, SLOT(floatingChanged(bool)));

スロット内でチェックします。dw がフローティングの場合は、dw->showFullscreen() を呼び出します。

void MainWindow::floatingChanged(bool floating)
{
    if( floating )
    {
        QDockWidget* dw = static_cast<QDockWidget*>(QObject::sender());
        dw->showFullScreen();
    }
}

Windows では、ドッキング解除された (フローティング) QDockWidget は、ドッキング解除後に直接全画面表示モードに切り替わります。しかし、Linux (ubuntu 12.04、gnome-shell 3.4.1) ではこれは機能しません (qt 4.8.0)。ドック ウィジェットは通常モードのままです。

(フローティング) QDockWidget をフルスクリーン モードに切り替える方法がわかりません。これに関する解決策は大歓迎です。実際、異なる OS はこの目的で異なる動作をしています。

私はすでに成功せずにウェブを検索したので、これが私の最初の投稿です。スペルミスを許してください私は英語のネイティブスピーカーではありません、ありがとう;)

ps osx-lions の動作も試してみます。ところで:それを試すには、Qtの例http://qt-project.org/doc/qt-5.0/qtwidgets/mainwindows-mainwindow.htmlのMainWindowに上記のfloatingChanged()スロットを実装して接続するだけです既存のドックウィジェットのいずれか、または MainWindow::createDockWidget() メソッド内で。

4

1 に答える 1

2

この関数の呼び出しは、showFullScreen()ウィンドウにのみ影響します。

フルスクリーン モードは Windows では問題なく動作しますが、X では特定の問題があります。これらの問題は、X11 クライアントとウィンドウ マネージャ間の通信を指定する ICCCM プロトコルの制限によるものです。ICCCM は、装飾されていないフルスクリーン ウィンドウの概念を単純に理解していません。したがって、私たちにできる最善の方法は、枠のないウィンドウをリクエストして配置し、サイズを変更して画面全体を埋めることです。ウィンドウマネージャーによっては、これが機能する場合と機能しない場合があります。ボーダーレス ウィンドウは MOTIF ヒントを使用して要求されます。MOTIF ヒントは、事実上すべての最新のウィンドウ マネージャーで少なくとも部分的にサポートされています。別の方法は、ウィンドウ マネージャーを完全にバイパスし、Qt::X11BypassWindowManagerHint フラグを使用してウィンドウを作成することです。これには他にも深刻な問題がありますが、たとえば、キーボード フォーカスが完全に壊れていたり、デスクトップの変更やユーザーが他のウィンドウを開いたりしたときの非常に奇妙な影響などです。最新のポスト ICCCM 仕様に従う X11 ウィンドウ マネージャーは、フルスクリーン モードを適切にサポートします。

于 2013-11-22T05:34:19.563 に答える