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