У меня есть плавающее окно инструментов. Это хорошо работает в 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.
Этот код из Ричарда Густавзена 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);
}
};
Спасибо Ричард и Нокиа!
Запустите приложение-пример оконных флагов Qt. Выберите Tool
и затем проверьте:
Это единственный способ, который я нашёл в Mac OS X, чтобы получить то, что вы хотите Но вы потеряете кнопку минимизации. Другого пути нет. Это ограничение оконного менеджера Mac OS X.
Подводя итог, в строке заголовка есть только пять наборов кнопок:
setWindowFlags(Qt::Tool)
setWindowFlags(Qt::Tool
| Qt::WindowTitleHint
| Qt::WindowMaximizeButtonHint
| Qt::WindowCloseButtonHint
| Qt::CustomizeWindowHint)
setWindowFlags(Qt::Tool
| Qt::WindowTitleHint
| Qt::WindowMaximizeButtonHint
| Qt::CustomizeWindowHint)
setWindowFlags(Qt::Инструмент | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
setWindowFlags(Qt::Tool | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::CustomizeWindowHint)
Вы можете попробовать установить флаг окна для включения Qt::Dialog
(выделено жирным шрифтом):
Указывает, что виджет является окном, которое должно быть оформлено как диалог (т.е. обычно нет кнопок максимизации или минимизации в строке заголовка). Это тип по умолчанию для QDialog. Если вы хотите использовать его как модальный диалог, он должен быть запущен из другого окна, или иметь родителя и использоваться со свойством QWidget::windowModality. Если вы сделаете его модальным, диалог не позволит другим окнам верхнего уровня в приложении получить какой-либо ввод. Мы ссылаемся на окно верхнего уровня, которое имеет родителя как вторичное окно.
Я не знаю, что случится, если вы попробуете установить оба параметра Qt::Dialog
и Qt::Tool
, но это может быть стоить изучения.
Я смог сделать это с помощью
setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint)