Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to put QLabel over QWidget?
Forum Updated to NodeBB v4.3 + New Features

How to put QLabel over QWidget?

Scheduled Pinned Locked Moved Solved General and Desktop
19 Posts 2 Posters 4.9k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kenchan
    wrote on last edited by kenchan
    #9

    Hello again,
    That does not look like the whole code what does "this" refer to?
    Did you copy this from the ui code and modify it?

    1 Reply Last reply
    0
    • DrageFabeldyrD Offline
      DrageFabeldyrD Offline
      DrageFabeldyr
      wrote on last edited by DrageFabeldyr
      #10

      this is QWidget

      setGeometry works, i've commented resizeEvent code i can see all 4 messages in video1

      ok, the whole code:

      #include <VLCQtCore/Common.h>
      #include <VLCQtCore/Instance.h>
      #include <VLCQtCore/Media.h>
      #include <VLCQtCore/MediaPlayer.h>
      #include <VLCQtCore/Audio.h>
      
      #include "SimplePlayer.h"
      //#include "ui_SimplePlayer.h"
      
      SimplePlayer::SimplePlayer(QWidget *parent) : QWidget(parent), _media1(0), _media2(0), _media3(0), _media4(0)
      {
          open_Local = new QPushButton;
          open_Local->setText("open_Local");
          open_Url = new QPushButton;
          open_Url->setText("open_Url");
      
          video1 = new VlcWidgetVideo();
          video2 = new VlcWidgetVideo();
          video3 = new VlcWidgetVideo();
          video4 = new VlcWidgetVideo();
      
          video1->setMinimumSize(440, 260);
          video2->setMinimumSize(440, 260);
          video3->setMinimumSize(440, 260);
          video4->setMinimumSize(440, 260);
      
          _instance1 = new VlcInstance(VlcCommon::args(), this);
          _instance2 = new VlcInstance(VlcCommon::args(), this);
          _instance3 = new VlcInstance(VlcCommon::args(), this);
          _instance4 = new VlcInstance(VlcCommon::args(), this);
      
          _player1 = new VlcMediaPlayer(_instance1);
          _player1->setVideoWidget(video1);
          _player1->setObjectName("_player1");
          _player2 = new VlcMediaPlayer(_instance2);
          _player2->setVideoWidget(video2);
          _player2->setObjectName("_player2");
          _player3 = new VlcMediaPlayer(_instance3);
          _player3->setVideoWidget(video3);
          _player3->setObjectName("_player3");
          _player4 = new VlcMediaPlayer(_instance4);
          _player4->setVideoWidget(video4);
          _player4->setObjectName("_player4");
      
          video1->setMediaPlayer(_player1);
          video2->setMediaPlayer(_player2);
          video3->setMediaPlayer(_player3);
          video4->setMediaPlayer(_player4);
      
          _player1->audio()->setMute(true);
          _player2->audio()->setMute(true);
          _player3->audio()->setMute(true);
          _player4->audio()->setMute(true);
      
          label1 = new QLabel(video1);
          label2 = new QLabel(video2);
          label3 = new QLabel(video3);
          label4 = new QLabel(video4);
      
          label1->setText("qwer");
          label1->setStyleSheet("color: red; font: bold 14px; qproperty-alignment: AlignCenter;");
          label2->setText("asdf");
          label2->setStyleSheet("color: red; font: bold 14px; qproperty-alignment: AlignCenter;");
          label3->setText("zxcv");
          label3->setStyleSheet("color: red; font: bold 14px; qproperty-alignment: AlignCenter;");
          label4->setText("1234");
          label4->setStyleSheet("color: red; font: bold 14px; qproperty-alignment: AlignCenter;");
      
      /*
          int x = video2->geometry().center().x() - warn_w / 2;
          int y = video2->geometry().center().y() - warn_h / 2;
      */
          label1->setGeometry(100, 50, warn_w, warn_h);
          label2->setGeometry(100, 100, warn_w, warn_h);
          label3->setGeometry(100, 150, warn_w, warn_h);
          label4->setGeometry(100, 200, warn_w, warn_h);
          /*
          label1->setGeometry(video2->geometry().center().x() - warn_w / 2, video2->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label2->setGeometry(video2->geometry().center().x() - warn_w / 2, video2->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label3->setGeometry(video2->geometry().center().x() - warn_w / 2, video2->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label4->setGeometry(video2->geometry().center().x() - warn_w / 2, video2->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          */
      /*
          label1->hide();
          label2->hide();
          label3->hide();
          label4->hide();
      */
          connect(open_Local, &QPushButton::clicked, this, &SimplePlayer::openLocal);
          connect(open_Url, &QPushButton::clicked, this, &SimplePlayer::openUrl);
      
          connect(_player1, &VlcMediaPlayer::end, this, &SimplePlayer::reconnect);
          connect(_player1, &VlcMediaPlayer::error, this, &SimplePlayer::reconnect);
          connect(_player1, &VlcMediaPlayer::playing, this, &SimplePlayer::have_connection);
          //connect(_player1, &VlcMediaPlayer::stateChanged, this, &SimplePlayer::have_connection);
      
          connect(_player2, &VlcMediaPlayer::end, this, &SimplePlayer::reconnect);
          connect(_player2, &VlcMediaPlayer::error, this, &SimplePlayer::reconnect);
          connect(_player2, &VlcMediaPlayer::playing, this, &SimplePlayer::have_connection);
          //connect(_player2, &VlcMediaPlayer::stateChanged, this, &SimplePlayer::have_connection);
      
          connect(_player3, &VlcMediaPlayer::end, this, &SimplePlayer::reconnect);
          connect(_player3, &VlcMediaPlayer::error, this, &SimplePlayer::reconnect);
          connect(_player3, &VlcMediaPlayer::playing, this, &SimplePlayer::have_connection);
          //connect(_player3, &VlcMediaPlayer::stateChanged, this, &SimplePlayer::have_connection);
      
          connect(_player4, &VlcMediaPlayer::end, this, &SimplePlayer::reconnect);
          connect(_player4, &VlcMediaPlayer::error, this, &SimplePlayer::reconnect);
          connect(_player4, &VlcMediaPlayer::playing, this, &SimplePlayer::have_connection);
          //connect(_player4, &VlcMediaPlayer::stateChanged, this, &SimplePlayer::have_connection);
      
          buttons_layout = new QHBoxLayout;
          buttons_layout->addWidget(open_Local);
          buttons_layout->addWidget(open_Url);
      
          video_row1_layout = new QHBoxLayout;
          video_row1_layout->addWidget(video1);
          video_row1_layout->addWidget(video2);
          video_row2_layout = new QHBoxLayout;
          video_row2_layout->addWidget(video3);
          video_row2_layout->addWidget(video4);
      
          main_layout = new QVBoxLayout;
          main_layout->addLayout(buttons_layout);
          main_layout->addLayout(video_row1_layout);
          main_layout->addLayout(video_row2_layout);
      
          this->setLayout(main_layout);
      
      }
      
      SimplePlayer::~SimplePlayer()
      {
          delete _player1;
          delete _player2;
          delete _player3;
          delete _player4;
      
          delete _media1;
          delete _media2;
          delete _media3;
          delete _media4;
      
          delete _instance1;
          delete _instance2;
          delete _instance3;
          delete _instance4;
      }
      
      void SimplePlayer::openLocal()
      {
          url1.clear();
          url2.clear();
          url3.clear();
          url4.clear();
      
          url1 = tr("rtsp://192.168.3.154:8554/");
          if (url1.isEmpty())
              return;
          _media1 = new VlcMedia(url1, _instance1);
          _player1->open(_media1);
      
          url2 = tr("rtsp://192.168.3.154:8558/");
          if (url2.isEmpty())
              return;
          _media2 = new VlcMedia(url2, _instance2);
          _player2->open(_media2);
      
          url3 = tr("rtsp://192.168.3.154:8562/");
          if (url3.isEmpty())
              return;
          _media3 = new VlcMedia(url3, _instance3);
          _player3->open(_media3);
      
          url4 = tr("rtsp://192.168.3.154:8566/");
          if (url4.isEmpty())
              return;
          _media4 = new VlcMedia(url4, _instance4);
          _player4->open(_media4);
      
          label1->raise();
          label2->raise();
          label3->raise();
          label4->raise();
      }
      
      void SimplePlayer::openUrl()
      {
          url1.clear();
          url2.clear();
          url3.clear();
          url4.clear();
      
          url1 = tr("rtsp://192.168.3.99:8554/");
          if (url1.isEmpty())
              return;
          _media1 = new VlcMedia(url1, _instance1);
          _player1->open(_media1);
      
          url2 = tr("rtsp://192.168.3.99:8558/");
          if (url2.isEmpty())
              return;
          _media2 = new VlcMedia(url2, _instance2);
          _player2->open(_media2);
      
          url3 = tr("rtsp://192.168.3.99:8562/");
          if (url3.isEmpty())
              return;
          _media3 = new VlcMedia(url3, _instance3);
          _player3->open(_media3);
      
          url4 = tr("rtsp://192.168.3.99:8566/");
          if (url4.isEmpty())
              return;
          _media4 = new VlcMedia(url4, _instance4);
          _player4->open(_media4);
      
          label1->raise();
          label2->raise();
          label3->raise();
          label4->raise();
      }
      
      void SimplePlayer::reconnect()
      {
          int x, y;
          VlcMediaPlayer* player = qobject_cast<VlcMediaPlayer*>(sender());
          player->open(player->currentMedia());
          if (QString(player->objectName()) == "_player1")
          {
              x = video1->geometry().center().x() - warn_w / 2;
              y = video1->geometry().center().y() - warn_h / 2;
              label1->setGeometry(x, y, warn_w, warn_h);
              label1->show();
          }
          if (QString(player->objectName()) == "_player2")
          {
              x = video2->geometry().center().x() - warn_w / 2;
              y = video2->geometry().center().y() - warn_h / 2;
              label2->setGeometry(x, y, warn_w, warn_h);
              label2->show();
          }
          if (QString(player->objectName()) == "_player3")
          {
              x = video3->geometry().center().x() - warn_w / 2;
              y = video3->geometry().center().y() - warn_h / 2;
              label3->setGeometry(x, y, warn_w, warn_h);
              label3->show();
          }
          if (QString(player->objectName()) == "_player4")
          {
              x = video4->geometry().center().x() - warn_w / 2;
              y = video4->geometry().center().y() - warn_h / 2;
              label4->setGeometry(x, y, warn_w, warn_h);
              label4->show();
          }
      }
      
      void SimplePlayer::have_connection()
      {
      /*
          VlcMediaPlayer* player = qobject_cast<VlcMediaPlayer*>(sender());
          player->open(player->currentMedia());
          //QString temp = player->objectName() ;
          qDebug() << QString(player->objectName());
          qDebug() << player->state();
          */
          /*
          if (QString(player->objectName()) == "_player1"  && player->state() == 3) // playing
              if (label1->isHidden() == false)
                  label1->hide();
          if (QString(player->objectName()) == "_player2"  && player->state() == 3) // playing
              if (label2->isHidden() == false)
                  label2->hide();
          if (QString(player->objectName()) == "_player3"  && player->state() == 3) // playing
              if (label3->isHidden() == false)
                  label3->hide();
          if (QString(player->objectName()) == "_player4"  && player->state() == 3) // playing
              if (label4->isHidden() == false)
                  label4->hide();
                  */
      /*
          label1->hide();
          label2->hide();
          label3->hide();
          label4->hide();
          */
      }
      
      void SimplePlayer::resizeEvent(QResizeEvent *event)
      {
      /*
          label1->setGeometry(video1->geometry().center().x() - warn_w / 2, video1->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label2->setGeometry(video2->geometry().center().x() - warn_w / 2, video2->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label3->setGeometry(video3->geometry().center().x() - warn_w / 2, video3->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          label4->setGeometry(video4->geometry().center().x() - warn_w / 2, video4->geometry().center().y() - warn_h / 2, warn_w, warn_h);
          */
      }
      
      
      1 Reply Last reply
      0
      • DrageFabeldyrD Offline
        DrageFabeldyrD Offline
        DrageFabeldyr
        wrote on last edited by
        #11

        seems i've found a problem:
        each label think that its videoparent topleftcorner is (0, 0)

        1 Reply Last reply
        0
        • K Offline
          K Offline
          kenchan
          wrote on last edited by
          #12

          can you post the SimplePlayer header please?

          1 Reply Last reply
          0
          • DrageFabeldyrD Offline
            DrageFabeldyrD Offline
            DrageFabeldyr
            wrote on last edited by DrageFabeldyr
            #13
            #ifndef SIMPLEPLAYER_H_
            #define SIMPLEPLAYER_H_
            
            #include <QMainWindow>
            #include <VLCQtWidgets/WidgetVideo.h>
            #include <QDebug>
            #include <QLabel>
            #include <QGridLayout>
            #include <QPushButton>
            
            class VlcInstance;
            class VlcMedia;
            class VlcMediaPlayer;
            
            class SimplePlayer : public QWidget
            {
                Q_OBJECT
            public:
                explicit SimplePlayer(QWidget *parent = 0);
                ~SimplePlayer();
                QHBoxLayout *buttons_layout;
                QHBoxLayout *video_row1_layout;
                QHBoxLayout *video_row2_layout;
                QVBoxLayout *main_layout;
            
            protected:
                void resizeEvent(QResizeEvent *event);
            
            private slots:
                void openLocal();
                void openUrl();
                void reconnect();
                void have_connection();
            
            private:
                VlcInstance *_instance1;
                VlcInstance *_instance2;
                VlcInstance *_instance3;
                VlcInstance *_instance4;
            
                VlcMedia *_media1;
                VlcMedia *_media2;
                VlcMedia *_media3;
                VlcMedia *_media4;
            
                VlcMediaPlayer *_player1;
                VlcMediaPlayer *_player2;
                VlcMediaPlayer *_player3;
                VlcMediaPlayer *_player4;
            
                QPushButton *open_Local;
                QPushButton *open_Url;
            
                VlcWidgetVideo * video1;
                VlcWidgetVideo * video2 ;
                VlcWidgetVideo * video3 ;
                VlcWidgetVideo * video4 ;
            
                QLabel *label1;
                QLabel *label2;
                QLabel *label3;
                QLabel *label4;
            
                QString url1;
                QString url2;
                QString url3;
                QString url4;
            
                int warn_w = 200; // warning width
                int warn_h = 40; // warning_height
            };
            
            #endif // SIMPLEPLAYER_H_
            

            ok, by this changes in code:

                int x = video1->geometry().center().x();// - warn_w / 2;
                int y = video1->geometry().center().y();// - warn_h / 2;
            
                label1->setGeometry(x, y, warn_w, warn_h);
                label2->setGeometry(x, y, warn_w, warn_h);
                label3->setGeometry(x, y, warn_w, warn_h);
                label4->setGeometry(x, y, warn_w, warn_h);
            

            i can see all 4 warnings over each video and all them at the bottom-right-corner, because x = 319 and y = 239
            and of course if i get coordinates from main widget and put it into videowidget when top-left-corner is (0, 0) i wouldn't see it - it's beyond the borders

            1 Reply Last reply
            0
            • K Offline
              K Offline
              kenchan
              wrote on last edited by
              #14

              Great i will see it a can build something like it. You probably need to map the coordinates

              1 Reply Last reply
              0
              • K Offline
                K Offline
                kenchan
                wrote on last edited by
                #15

                What version of Qt are you using and what is the platform?

                DrageFabeldyrD 1 Reply Last reply
                0
                • K kenchan

                  What version of Qt are you using and what is the platform?

                  DrageFabeldyrD Offline
                  DrageFabeldyrD Offline
                  DrageFabeldyr
                  wrote on last edited by
                  #16

                  @kenchan win7x64 Qt5.7.1

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    kenchan
                    wrote on last edited by
                    #17

                    OK, your resize event should probably look something like this

                    label1->setGeometry(video1->rect().adjusted(video1->rect().width()/4,video1->rect().height()/4,-video1->rect().width()/4,-video1->rect().height()/4));
                    label2->setGeometry(video2->rect().adjusted(video2->rect().width()/4,video2->rect().height()/4,-video2->rect().width()/4,-video2->rect().height()/4));
                    label3->setGeometry(video3->rect().adjusted(video3->rect().width()/4,video3->rect().height()/4,-video3->rect().width()/4,-video3->rect().height()/4));
                    label4->setGeometry(video4->rect().adjusted(video4->rect().width()/4,video4->rect().height()/4,-video4->rect().width()/4,-video4->rect().height()/4));
                    
                    1 Reply Last reply
                    0
                    • DrageFabeldyrD Offline
                      DrageFabeldyrD Offline
                      DrageFabeldyr
                      wrote on last edited by
                      #18

                      my solution is:

                          QRect videoRect = video1->geometry();
                          label1->setGeometry(videoRect.width()/2 - warn_w/2, videoRect.height()/2, warn_w, warn_h);
                      

                      for others just put 2, 3, 4 instead of 1 and it works, but again many thanks

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        kenchan
                        wrote on last edited by
                        #19

                        Good, glad you got it working.

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved