2

だから私はqtでこのウィンドウ/メインウィンドウ/アプリケーションを常に一番下にあるように設定しようとしています(常に一番下のウィンドウのように)(したがって、レインメーターはウィジェットでこれを何らかの形で行います)が、Mac osxにそのようなことをさせることさえできません. 全部試しました

this->setWindowFlags(Qt::WindowStaysOnBottomHint);

しかし運がない。ヒントはありますか?サンプルコードは素晴らしいです。

4

1 に答える 1

5

悪いニュースと良いニュースがあります。悪いニュースは、単に実装されていないことです。

幸いなことに、Qt はオープン ソースであるため、クラックして開いて確認することができます。バグがある場合は、修正を送信できます。qwidget.cpp:9144の一般的なコードではQWidget::setWindowFlags、 次のようになります。

void QWidget::setWindowFlags(Qt::WindowFlags flags)
{
    if (data->window_flags == flags)
        return;

    Q_D(QWidget);

    if ((data->window_flags | flags) & Qt::Window) {
        // the old type was a window and/or the new type is a window
        QPoint oldPos = pos();
        bool visible = isVisible();
        setParent(parentWidget(), flags);

        // if both types are windows or neither of them are, we restore
        // the old position
        if (!((data->window_flags ^ flags) & Qt::Window)
            && (visible || testAttribute(Qt::WA_Moved))) {
            move(oldPos);
        }
        // for backward-compatibility we change Qt::WA_QuitOnClose attribute value only when the window was recreated.
        d->adjustQuitOnCloseAttribute();
    } else {
        data->window_flags = flags;
    }
}

したがって、基本的には設定するだけですwindow_flags。QWidget の Mac での動作はqwidget_mac.mmにあります。

Qt::WindowStaysOnBottomHintそして、そのファイルには参照がありません。(見つかるだろうQt::WindowStaysOnTopHintけど…)

「Qtにパッチを当てるか、Qtの下に行かない限り不可能です」と言ってやめます。

パッチ適用qwidget_mac.mmは、読者への演習として残されています。:-)

于 2013-02-12T20:24:54.180 に答える