簡體   English   中英

QLabel中的QRubberBand和MPlayer

[英]QRubberBand and MPlayer in QLabel

我已經嘗試過stackoverflow提供的許多解決方案以使其透明。 我想使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);
        }

首先,關於“ QRubberband僅應在該QLabel上工作”。 您需要使QLabel成為QRubberBand的父QRubberBand才能實現。

其次,關於透明度,我假設您的意思是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));
    }
};

上面仍然可能在小部件上留下視覺偽像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM