2017-04-22 3 views
0

나는 이미 투명하게 만들기 위해 stackoverflow에서 제공되는 많은 솔루션을 시도해 보았습니다. QRubberBand를 투명하게 만들고 싶습니다. 또한 mplayer로 인한 녹색의 문제에 직면하고 있습니다.QRabel의 QRubberBand 및 MPlayer

#include "physician.h" 
    #include "ui_physician.h" 

    Physician::Physician(QWidget *parent) : 
     QMainWindow(parent), 
     ui(new Ui::Physician) 
    { 
     ui->setupUi(this); 
     ui->sendROIButton->setStyleSheet(
        "background-color: #d9d9d9;" 
        "border-radius: 10px;" 
        "color: Black; " 
        "font-size: 15px;" 
     ); 
    } 

    Physician::~Physician() 
    { 
     delete ui; 
    } 

    void Physician::mouseMoveEvent(QMouseEvent *e) 
    { 
     rubberBand->hide(); 
     bottomRight = e->pos(); 
     QRect rect = QRect(topLeft, bottomRight).normalized(); 
     rubberBand->setGeometry(rect);//Area Bounding 
     QToolTip::showText(e->globalPos(), QString("%1,%2") 
     .arg(rubberBand->size().width()) 
     .arg(rubberBand->size().height()), this); 
     } 
     void Physician::mousePressEvent(QMouseEvent *e) 
     { 
     wWidth=ui->videoShowLabel->width(); 
     wHeight = ui->videoShowLabel->height(); 
     rubberBand->setGeometry(QRect(0, 0, 0, 0).normalized()); 
     rubberBand->hide(); 
     topLeft = e->pos(); 
     } 
     void Physician::mouseReleaseEvent(QMouseEvent *e){ 
     rubberBand->show(); 
     } 

     void Physician::on_manualROIRadioButton_clicked() 
     { 
     rubberBand = new QRubberBand(QRubberBand::Rectangle, this); 
     } 

     void Physician::on_autoROIRadioButton_clicked() 
     { 
     QString winNuber= QString::number((int)(ui->videoShowLabel->winId())); 
     QStringList argsList ; 
     argsList << "-slave" << "-quiet" << "-wid" << winNuber << "zoom" << "- 
     vo" << "gl" << "C:/../../../Physician21/PhotoshopQML.mkv"; 
     mplayer_proc = new QProcess; 
     mplayer_proc- 
     >start("C:/../../../PhysicianTest/mplayer/mplayer.exe",argsList); 
     } 
+0

http://imgur.com/tUYSOdk –

+0

http://imgur.com/2gnndL3 –

+0

나는이 QRubberBand는 MPlayer는이 –

답변

0

첫째, 관련 "QRubberBand는 해당 QLabel에 작동합니다." 이를 달성하려면 QLabelQRubberBand의 부모로 만들어야합니다.

둘째, 투명도에 대해서는 mplayer의 출력이 QRubberBand으로 그려진 사각형을 통해 표시되어야한다고 가정합니다. 네가 그렇게 할 수 있을지 확신하지 못한다. 이렇게하려면 고무 밴드 페인팅 로직이 컴포지션으로 작동해야하지만이를 수행하려면 소스 및 대상 (mplayer) 이미지를 모두 알아야합니다. mplayer가 기본 네이티브 윈도우에 직접적으로 그려지기 때문에 Qt은 현재 대상 이미지에 대한 지식이 있으므로 소스 이미지를 병합 할 수 없습니다. 가장 좋은 방법은 QRubberBand이 사각형 윤곽선 만 그릴 수있는 스타일을 찾고/생성하는 것입니다. 가능한 경우 확실하지 않습니다. 당신은 여전히 ​​비록 위젯을 시각적 결함을 떠날 수 ... 위의

class rubber_band: public QRubberBand { 
    using super = QRubberBand; 
public: 
    template<typename... Types> 
    explicit rubber_band (const Types &... args) 
    : super(args...) 
    {} 
protected: 
    virtual void paintEvent (QPaintEvent *event) override 
    { 
     QPainter painter(this); 
     painter.setPen(Qt::red); 
     painter.setBrush(Qt::NoBrush); 
     painter.drawRect(rect().adjusted(0, 0, -1, -1)); 
    } 
}; 

을 하위 클래스 뭔가 등으로 자신의 회화를 할 수 있습니다.

+0

당신이 것을 제거하는 방법 도움이 될 수 있습니다 포함되어있는 것을 QLabel에서만 작동한다는 것을 만들고 싶어 채색?? –

+0

어떤 위젯이 영향을 받는지 정확하게 알지 못하면 녹색 가장자리를 주석으로 처리 할 수 ​​없습니다 (창 ID가 mplayer에 전달 된 동일한 위젯입니까?). 하나의 제안은 다른'-vo' 옵션을 시도하는 것일 수 있습니다. 명령 줄에서 "mplayer -vo help"를 수행하고 몇 가지 옵션을 시도하십시오. –

+0

나는 당신의 대답을 고맙게 생각한다. 나를 도우려고한다. (예, mplayer에 전달 된 영향을받은 위젯과 동일하다.)하지만 제안에 따라 나는 내가 넘어간 인수를 가지고 놀아야한다고 생각한다. 마침내 나는 그 초록색을 없앴다. –

관련 문제