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?
Qt 6.11 is out! See what's new in the release blog

How to put QLabel over QWidget?

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