我正在尝试更改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)
但出现的橡皮带是标准的黑色点缀.关于如何做到这一点的任何想法?
实际渲染取决于平台,但对于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.游民.