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.
  • 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