1
我想用QRubberBand
来绘制一个矩形。我需要矩形边框是不透明的,其内部是透明的。但是,我只能以其他方式来做到这一点,边框是透明的,填充不透明。这里是我使用的代码,无法获得透明QRubberband
class roiFrame : public QRubberBand
{
public:
roiFrame(Shape s, QWidget * p = 0):QRubberBand(s, p){}
~roiFrame(){}
protected:
void paintEvent(QPaintEvent *pe)
{
Q_UNUSED(pe);
QStyleOptionRubberBand opt;
QStylePainter painter(this);
painter.setOpacity(0.8); // from aamer4yu
opt.initFrom(this);
// opt.opcatiy = false; //This one also makes the border to be transparent .
painter.drawControl(QStyle::CE_FocusFrame, opt);
}
};
作为替代方案,我尝试使用QPainter::drawRect
绘制一个矩形:
myWindow::myWindow(QWidget *parent): QFrame(parent)
{
ui.setupUi(this);
}
myWindow::~myWindow()
{
}
void myWindow::mouseReleaseEvent(QMouseEvent * event)
{
releaseX = event->x();
releaseY = event->y();
}
void myWindow::mousePressEvent(QMouseEvent * event)
{
pressX = event->x();
pressY = event->y();
}
void myWindow::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QRectF rectangle(pressX,pressY,releaseX,releaseY);
QPainter painter(this);
painter.setOpacity(0.8);
painter.drawRect(rectangle);
painter.end();
}
默认的'QRubberBand :: paintEvent'有什么问题?或者为什么不使用'QStyle :: CE_RubberBand'作为'drawControl'的第一个参数? – m7913d
我无法使用默认paintEvent获得透明矩形,所以我修改了它们。 QStyle :: CE_RubberBand也没有完成这项工作。 我试图在视频上绘制矩形,基于鼠标按下事件。 drawRect函数也没有做这项工作。 – Som
你可以添加你用'drawRect'试过的东西吗?正如你想要一个非常具体的结果,使用这个低级函数似乎适合我。 – m7913d