2010-12-29 6 views
1

QRubberBand을 사용하여 잘 작동하는 바탕 화면/열린 창 위에 선택 영역을 그려야하지만 스타일 시트 명령이 없기 때문에 어떻게 볼 수 있습니까? 테두리의 색상과 너비를 변경하고 내부를 완전히 투명하게 만들 수 있습니까?QRubberBand like 기능 - 정적 선택 영역

편집 : Qt에서 QRubberBand와 비슷한 방법을 사용할 수 있습니까? 화가 메서드를 변경하면 많은 문제가 발생합니다 (테두리는 왼쪽과 오른쪽의 크기가 오른쪽과 아래보다 한 픽셀 큽니다. 표시된 영역은 완전히 투명하지 않을 수 있습니다).

편집 2 : 커버 할 영역은 정적이며 사용자가 드래그하는 영역이 아닙니다.

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를 함께 사용하십시오.

배경을 제거하는 방법에 대한 정보는 요? 현재는 페인트 방법이 없으므로 기본 파란색 대신 반투명 한 흰색 배경입니다.

편집 4 : 다음과 같이 문제가 표시됩니다. Visible background error 테두리가있는 배경이 반투명 한 흰색 인 방법을 확인하십시오. 내가 사용하고있는 페인트 방법은 이것을 그리지 않고 테두리 만 그립니다. 오브젝트가 완전히 보이지 않게하고 오브젝트의 불투명도를 설정하면 테두리를 투명하게 만들 수 있습니다. 다시 setStyleSheet 기능을 지원 QWidget에서

답변

0

QRubberBand 상속은 QRubberBand member functions 목록을 참조하십시오.

::paintEvent을 무시하면 올바르게 작동하지 않을 경우 example을 참조하십시오.

+0

QRubberBand는 setStyleSheet를 지원하지 않으므로 작동하지 않습니다. 링크 된 예와 다른 것들을 시도해 보았습니다. 그리고 그들은 모두 제대로 작동하지 않습니다. – FlameFurious

+0

당신이 시도한 것을 보여줍니다. – ismail

+0

그냥 테두리가없는 흰색 투명 상자가있는 빈 그림 방법으로 시도했습니다 ... QPen으로 테두리를 추가하면 불투명 변경으로 인해 화가가 영향을받습니다 ... – FlameFurious

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; 

};