Как удалить кнопку развертывания окна в окне инструментов Mac OS X в 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
задан Andy Brice 13 January 2010 в 18:55
поделиться

4 ответа

Этот код из Ричарда Густавзена Nokia работает в 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);
    }
};

Спасибо Ричард и Нокиа!

4
ответ дан 18 December 2019 в 07:54
поделиться

Запустите приложение-пример оконных флагов Qt. Выберите Tool и затем проверьте:

  • Window title
  • Customize window
  • Window close button

Это единственный способ, который я нашёл в Mac OS X, чтобы получить то, что вы хотите Но вы потеряете кнопку минимизации. Другого пути нет. Это ограничение оконного менеджера Mac OS X.

Подводя итог, в строке заголовка есть только пять наборов кнопок:

  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::Инструмент | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
  5. Нет кнопок в строке заголовка: setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
10
ответ дан 18 December 2019 в 07:54
поделиться

Вы можете попробовать установить флаг окна для включения Qt::Dialog (выделено жирным шрифтом):

Указывает, что виджет является окном, которое должно быть оформлено как диалог (т.е. обычно нет кнопок максимизации или минимизации в строке заголовка). Это тип по умолчанию для QDialog. Если вы хотите использовать его как модальный диалог, он должен быть запущен из другого окна, или иметь родителя и использоваться со свойством QWidget::windowModality. Если вы сделаете его модальным, диалог не позволит другим окнам верхнего уровня в приложении получить какой-либо ввод. Мы ссылаемся на окно верхнего уровня, которое имеет родителя как вторичное окно.

Я не знаю, что случится, если вы попробуете установить оба параметра Qt::Dialog и Qt::Tool, но это может быть стоить изучения.

3
ответ дан 18 December 2019 в 07:54
поделиться

Я смог сделать это с помощью

setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint)
1
ответ дан 18 December 2019 в 07:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: