Стиль Qt QPalette :: windowText возвращается после запуска приложения

Я создал приложение 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

2

Решение

Я думаю, что ваш ответ уже сообщен (и подтвержден) как ошибка QT (QTBUG-32067).

Хотя мы никогда не поддерживали пользовательские роли палитры для большинства
QMacStyle Я думаю, что мы должны разрешить установку пользовательской палитры даже
если это сломается в некоторых случаях. Дженс комментирует QTBUG-32067

1

Другие решения

Увидеть примечания к документации по QApplication :: setpalette.

Заметка: Некоторые стили не используют палитру для всех рисунков, для
Например, если они используют собственные движки тем. В этом случае
для стилей Windows XP, Windows Vista и Mac OS X.

Таким образом, вы можете проверить это, запустив приложение в другом стиле, запустив ваше приложение из оболочки следующим образом:

applicationToRun -style=windows

Или, используя другие стили, docs говорит: motif, windows и platinum, но это зависит от установленного Qt и его плагинов.


Редактировать: ups Я не заметил, что вы устанавливаете стиль с помощью кода. В любом случае убедитесь, что поддерживаемый вами стиль поддерживается Qt на текущей машине, проверьте, a.setStyle("cleanlooks"); возвращает правильный стиль (при ошибках он возвращает ноль). Я бы попробовал все стили (список доступных форм QStyleFactory::keys()).

0

Если вы создали подкласс QStyle для реализации своего пользовательского стиля, возможно, ваш пользовательский стиль устанавливает правильный цвет только в том случае, если виджет имеет фокус (и по умолчанию проскальзывает иначе).

Вы пытались использовать таблицу стилей, которая задает цвет переднего плана вместо использования палитры? Это оба догадки.

0
По вопросам рекламы [email protected]