2

所以我试图在qt中设置这个窗口/主窗口/应用程序总是在底部(就像总是底部窗口一样)(所以rainmeter以某种方式用他们的小部件做到这一点),但我什至不能让mac osx做这样的事情. 我已经尝试了整个

this->setWindowFlags(Qt::WindowStaysOnBottomHint);

但没有任何运气。有什么提示吗?示例代码很棒。

4

1 回答 1

5

有坏消息和好消息。坏消息是它根本没有实施。

好消息是:由于 Qt 是开源的,你可以打开它看看就知道了。如果有错误,您可以提交修复。QWidget::setWindowFlags这是交易,在 qwidget.cpp:9144的通用代码中你有这个:

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 回答