Изменить цвет QRubberBand - PullRequest
       2

Изменить цвет QRubberBand

3 голосов
/ 15 ноября 2011

Я пытаюсь изменить цвет QRubberBand.Я попробовал это:

QRubberBand* rubberBand = new QRubberBand(QRubberBand::Rectangle, this->graphicsView);
QPalette palette;
palette.setBrush(QPalette::Foreground, QBrush(Qt::green));
palette.setBrush(QPalette::Base, QBrush(Qt::red));

rubberBand->setPalette(palette);

rubberBand->resize(30, 30);
rubberBand->show();

, но появляется резиновая полоса стандартного черного с точками.Есть идеи как это сделать?

Ответы [ 2 ]

6 голосов
/ 15 ноября 2011

Фактический рендеринг зависит от платформы, но для Windows (возможно, других) вы устанавливаете роль цвета QPalette::Highlight. Этот пример работает:

#include <QtGui>

int main(int argc, char **argv) {
  QApplication app(argc, argv);
  QRubberBand band(QRubberBand::Rectangle);

  QPalette pal;
  pal.setBrush(QPalette::Highlight, QBrush(Qt::red));
  band.setPalette(pal);

  band.resize(30, 30);
  band.show();
  return app.exec();
}

Если вы находитесь на другой платформе, дайте мне знать, и я смогу увидеть, что работает для этой платформы.

Однако , поскольку вы ссылаетесь на графическое представление, мне интересно, имеете ли вы в виду черную пунктирную линию, которая появляется вокруг выделенных элементов? Это что-то совершенно другое, и вообще не включает QRubberBand. Если это так, возможно, вам придется обновить вопрос.

Кстати, я посмотрел код QWindowsVistaStyle, чтобы найти ответ. Если вы работаете на другой платформе и имеете доступ к источнику, вы можете найти правильный класс стилей для этой платформы.

ОБНОВЛЕНИЕ Похоже, вам не повезло с Ubuntu. Это использует QCleanLooksStyle, который вызывает QWindowsStyle для круглой резинки. Там цвета жестко закодированы:

QPixmap tiledPixmap(16, 16);
QPainter pixmapPainter(&tiledPixmap);
pixmapPainter.setPen(Qt::NoPen);
pixmapPainter.setBrush(Qt::Dense4Pattern);
pixmapPainter.setBackground(Qt::white);
pixmapPainter.setBackgroundMode(Qt::OpaqueMode);
pixmapPainter.drawRect(0, 0, tiledPixmap.width(), tiledPixmap.height());
... etc ...

Кроме того, Справочник таблиц стилей Qt не перечисляет QRubberBand как подчиняющийся любым стилям. Если вам действительно нужен другой цвет, единственным вариантом может быть подкласс QRubberBand и реализация paintEvent. Облом.

4 голосов
/ 29 марта 2012

Самый простой способ - использовать QGraphicsColorEffect следующим образом:

QGraphicsColorizeEffect *e = new QGraphicsColorizeEffect(rubberBand_);
e->setColor(QColor("red"));
rubberBand_->setGraphicsEffect(e);

Однако, QGraphicsEffects устарело в Qt 4.8 по причине "некорректного дизайна". Эффекты цвета и капли тени широко используются в моих проектах для визуализации элементов, не являющихся виджетами, меню и шрифтов. Я надеюсь, что Nokia предоставит эквивалентные решения, прежде чем отказаться от всей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...