Как настроить заголовок окна QMdiSubWindow с помощью qss? - PullRequest
5 голосов
/ 09 января 2011

Я бы хотел настроить заголовок окна QMdiSubWindow.Для этого я использую qss.

QMdiSubWindow { border: 1px solid #000000; background: #000000 }
QMdiSubWindow:title { background: #000000 }

Проблема в том, что при применении этого qss значки окон исчезают.Я знаю, что можно определить эти значки в qss для QDockWidget

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... }

Однако я не могу найти способ определить его для QMdiSubWindow.Возможно, этого пути не существует.Вы знаете, возможно ли это?

1 Ответ

1 голос
/ 31 декабря 2014

По состоянию на Qt 5.2 вы не можете;не проверяли 5.3, но AFAIK они ничего не изменили в QMdiArea/QMdiSubWindow в 5.3 выпуске.

Самое простое решение, которое у вас есть, это использовать QCommonStyle и раскрасить строку заголовка, используяQPainter.Для получения дополнительной информации см. Документацию QCommonStyle и QStyle .Обратите внимание, что для вашего класса стилей рекомендуется получить QCommonStyle, а не QStyle.QCommonStyle наследует QStyle, поэтому вы ничего не потеряете.

И если вы хотите добиться более сложных эффектов, таких как тень на вложенном окне, то единственный вариант, который вы здесь оставите, - это получить QMdiSubWindow и QMdiArea, вызовите QWidget::setWindowFlags(Qt::FramelessWindowHintflag) в производном классе QMdiSubWindow и реализуйте с нуля свое собственное подокно со своей собственной строкой заголовка.Затем вы можете определить свои собственные Q_PROPERTY с типом QColor и получить доступ к тем из QSS, как показано здесь , чтобы настроить цвета заголовка из QSS.

Другой вариантбыло бы создать новый виджет области MDI с нуля, но я не думаю, что это будет применимо в вашем случае.Если вам просто нужно настроить строку заголовка, используя собственный стиль, это лучший подход, который вы можете использовать.Если в случае неполадок могут быть предоставлены примеры для редактирования этого поста.

Но если вы хотите настроить стандарт QMdiSubWindow, используя только QSS, к сожалению, на данный момент это невозможно.

...