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?

How to put QLabel over QWidget?

Scheduled Pinned Locked Moved Solved General and Desktop
19 Posts 2 Posters 5.3k 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