Я создал приложение Qt, используя слегка модифицированную версию стиля ‘cleanlooks’. Я попытался установить WindowText с помощью следующего кода, но изменения не сохраняются. когда я открываю приложение, оно открывается на заднем плане с правильным цветом текста, когда я щелкаю приложение и выводю его на передний план, текст становится черным, и я не могу понять, почему. Кто-нибудь знает, почему это может быть или как я должен установить текст окна?
#include <QtGui/QApplication>
#include <QtGui/QPalette>
#include <QtGui/QColor>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPalette p;
p.setBrush(QPalette::WindowText, QColor(255,0,0));
a.setStyle("cleanlooks");
a.setPalette(p);
MainWindow w;
w.show();
return a.exec();
}
Я использую OSX 10.9 и Qt 4.8.6
Обновление 1
Я протестировал код на Windows 7 Machine, работающей на Qt 4.8.5, собранной из исходного кода, и этой проблемы не возникало. Кажется, у меня нет проблем ни с MacOS 10.9, ни с Qt 4.8.6
Я думаю, что ваш ответ уже сообщен (и подтвержден) как ошибка QT (QTBUG-32067).
Хотя мы никогда не поддерживали пользовательские роли палитры для большинства
QMacStyle Я думаю, что мы должны разрешить установку пользовательской палитры даже
если это сломается в некоторых случаях. Дженс комментирует QTBUG-32067
Увидеть примечания к документации по QApplication :: setpalette.
Заметка: Некоторые стили не используют палитру для всех рисунков, для
Например, если они используют собственные движки тем. В этом случае
для стилей Windows XP, Windows Vista и Mac OS X.
Таким образом, вы можете проверить это, запустив приложение в другом стиле, запустив ваше приложение из оболочки следующим образом:
applicationToRun -style=windows
Или, используя другие стили, docs говорит: motif, windows и platinum, но это зависит от установленного Qt и его плагинов.
Редактировать: ups Я не заметил, что вы устанавливаете стиль с помощью кода. В любом случае убедитесь, что поддерживаемый вами стиль поддерживается Qt на текущей машине, проверьте, a.setStyle("cleanlooks");
возвращает правильный стиль (при ошибках он возвращает ноль). Я бы попробовал все стили (список доступных форм QStyleFactory::keys()
).
Если вы создали подкласс QStyle для реализации своего пользовательского стиля, возможно, ваш пользовательский стиль устанавливает правильный цвет только в том случае, если виджет имеет фокус (и по умолчанию проскальзывает иначе).
Вы пытались использовать таблицу стилей, которая задает цвет переднего плана вместо использования палитры? Это оба догадки.