如何在Qt中删除Mac OS X工具窗口中的最大化按钮

时间:2010-01-13 18:55:31

标签: macos qt

我有一个浮动工具窗口。它在Windows上工作正常,但我无法得到 摆脱Mac OS X上的最大化按钮。我尝试过取消设置 Qt::WindowMaximizeButtonHint并将窗口设置为固定大小。 似乎没什么用。

MyWidget::MyWidget( QWidget* parent )
:QWidget( parent, Qt::Tool | Qt::CustomizeWindowHint )
{
   setupUi( this );

   setFixedSize( sizeHint() ); // doesn't remove maximise button
   setWindowFlags( windowFlags() & ~Qt::WindowMaximizeButtonHint ); // doesn't remove maximise button
}

我不想使用无框窗口。有任何想法吗?我使用的是Qt 4.4。

5 个答案:

答案 0 :(得分:10)

启动Qt windowflags示例应用程序。选择Tool单选按钮,然后选中:

  • 窗口标题
  • 自定义窗口
  • 窗口关闭按钮

这是我在Mac OS X上找到你想要的唯一方法,但你会失去最小化按钮。别无他法。那是Mac OS X Window Manager的限制。

总结一下,标题栏中只有五组按钮:

  1. 所有按钮均可见,所有按钮均已启用:setWindowFlags(Qt::Tool)
  2. 启用所有按钮可见,关闭和最大化按钮,最小化按钮禁用:setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
  3. 所有按钮均可见,最大化按钮启用,关闭并最小化已禁用:setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowMaximizeButtonHint | Qt::CustomizeWindowHint)
  4. 仅显示关闭按钮并启用setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
  5. 标题栏中没有按钮:setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)

答案 1 :(得分:4)

诺基亚的Richard Gustavsen的代码在Qt 4.4中使用:

class MyWidget : public QWidget
{
    public:

    MyWidget::MyWidget( QWidget* parent ) : QWidget(parent, Qt::Tool)
    {
    }

    void setVisible(bool visible)
    {
        QWidget::setVisible(visible);
        ChangeWindowAttributes(qt_mac_window_for(this), kWindowNoAttributes, kWindowFullZoomAttribute);
    }
};

感谢理查德和诺基亚!

答案 2 :(得分:3)

您可以尝试设置窗口标记以包含Qt::Dialog(粗体添加):

  

表示窗口小部件是一个应该作为对话框进行装饰的窗口(例如,标题栏中通常没有最大化或最小化按钮)。这是QDialog的默认类型。如果要将其用作模式对话框,则应从另一个窗口启动它,或者使用父窗口并与QWidget :: windowModality属性一起使用。如果将其设置为模态,则对话框将阻止应用程序中的其他顶级窗口获取任何输入。我们引用一个顶层窗口,它将父窗口作为辅助窗口。

我不知道如果您尝试设置Qt::DialogQt::Tool会发生什么,但可能值得调查。

答案 3 :(得分:2)

这是一种跨平台的方式。您已覆盖QMainWindow或QWidget的setVisible方法。同样可以修改任何窗口标志,对窗口产生视觉冲击。

必须以这种方式完成的原因是类在实际显示窗口之前需要具有窗口规范。

void setVisible(bool visible)
{
    setWindowFlags( windowFlags() & ~Qt::WindowMaximizeButtonHint );
    QWidget::setVisible(visible);
}

答案 4 :(得分:1)

我能够用

做到这一点
setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint)