更改QRubberBand的颜色

Dav*_*ria 3 qt qt4

我正在尝试更改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();
Run Code Online (Sandbox Code Playgroud)

但出现的橡皮带是标准的黑色点缀.关于如何做到这一点的任何想法?

Dav*_*eer 6

实际渲染取决于平台,但对于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();
}
Run Code Online (Sandbox Code Playgroud)

如果您在不同的平台上,请告诉我,我可以看到适用于该平台的内容.

但是,由于您参考图形视图,我想知道您是否指出所选项目周围出现的黑色虚线?这是完全不同的东西,根本不涉及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 ...
Run Code Online (Sandbox Code Playgroud)

此外,Qt样式表参考QRubberBand列为遵守任何样式.如果你真的需要不同的颜色,你唯一的选择可能是子类QRubberBand和实现paintEvent.游民.