2017-04-22 11 views
0

私はすでにstackoverflowで透明にするために提供されている多くのソリューションを試しました。 QRubberBandを透明にしたいと思っています。また、mplayerに起因する緑色の問題に直面しています。QLabelの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でのみ動作するはずです。そのためには、をQRubberBandの親にする必要があります。

第2に、透明性に関しては、QRubberBandで描かれた矩形を通してmplayerからの出力が見えるはずですか?私はあなたがそれを行うことができるとは確信していません。そうするためには、ラバーバンドペインティングロジックがコンポジターとして機能する必要がありましたが、そのためにはソースとデスティネーション(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

あなたの答えはatleastに感謝します(私はそれがmplayerに渡された影響を受けた同じウィジェットでした)が、あなたの提案のために私は私が渡した引数で再生する必要があると思います。そして最後に私はその緑の色を取り除く。 –