我正在尝试在桌面/打开的窗口顶部绘制一个选择区域,使用QRubberBand
可以很好地工作,但是因为它没有样式表命令,我怎么能够改变边框的颜色和宽度,使其内部完全透明?
编辑:在Qt中是否有比QRubberBand更类似的方法?更改画家方法会产生很多问题(边框在左侧和顶部比右侧和底部大一个像素,标记区域似乎不能完全透明)。
Edit2:它将覆盖的区域是静态的,而不是用户拖动的区域。
EDIT3:
class CustomRubberBand : public QRubberBand
{
public:
CustomRubberBand(Shape s, QWidget * p = 0) : QRubberBand(s, p)
{
}
protected:
void paintEvent(QPaintEvent *pe)
{
Q_UNUSED(pe);
QPainter painter;
QPen pen(Qt::red, 6);
pen.setStyle(Qt::SolidLine);
painter.begin(this);
painter.setPen(pen);
painter.drawRect(pe->rect());
painter.end();
}
};
这给了我想要的边框,但我没有发现任何关于删除背景(完全透明)的工作......似乎Vista和Qt存在问题。
有关如何删除背景的任何提示?现在没有绘画方法,它是半透明的白色背景而不是默认的蓝色背景。
Edit4: 这显示了问题:Visible background error注意带边框的背景是半透明的白色。我正在使用的绘画方法不是绘制这个而是仅绘制边框。我希望它完全不可见,设置对象的不透明度也会使边框变得透明,这不应该是。
答案 0 :(得分:1)
您可以在paintEvent函数中使用透明的QPalette来实现您的目标。
class ScreenViewport : public QRubberBand
{
Q_OBJECT
public:
ScreenViewport(Shape shape, QWidget *parent = 0) : QRubberBand(shape,parent){
}
protected:
void paintEvent(QPaintEvent *pe){
pal = new QPalette(Qt::transparent);
setPalette(*pal);
Q_UNUSED(pe);
QPainter painter;
QPen pen(Qt::red, 6);
pen.setStyle(Qt::DashLine);
painter.begin(this);
painter.setPen(pen);
painter.drawRect(pe->rect());
painter.end();
}
private:
QPalette *pal;
};
答案 1 :(得分:0)
QRubberBand
继承自QWidget
,后者又支持setStyleSheet
功能,请参阅QRubberBand member functions
列表。
如果这不适合您,只需覆盖::paintEvent
,请参阅此example
。