Gamma
Gamma

Reputation: 347

Widget is not properly visible

In this code which can able to play video and play *.mp3. code works properly,in my mainwindow.ui I added widget called widgetGif by drag and drop .This widget containing label also. but this widget not visible when I run the program. How can I display this widget called widgetGif

here is part of my code :

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMovie>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    player = new QMediaPlayer(this);
    vw = new QVideoWidget (this);
    player->setVideoOutput(vw);
    this->setCentralWidget(vw); //I think this is the reason

    slider = new QSlider(this);
    bar = new QProgressBar(this);
    slider->setOrientation(Qt::Horizontal);
    ui->statusBar->addPermanentWidget(slider);
    ui->statusBar->addPermanentWidget(bar);



    connect(player,&QMediaPlayer::durationChanged,slider,&QSlider::setMaximum);
    connect(player,&QMediaPlayer::positionChanged,slider,&QSlider::setValue);
    connect(slider,&QSlider::sliderMoved,player,&QMediaPlayer::setPosition);
    connect(player,&QMediaPlayer::durationChanged,bar,&QProgressBar::setMaximum);
    connect(player,&QMediaPlayer::positionChanged,bar,&QProgressBar::setValue);


    sliderVolumn = new QSlider(this);
    sliderVolumn->setOrientation(Qt::Horizontal);
    ui->statusBar->addPermanentWidget(sliderVolumn);

    connect(sliderVolumn,&QSlider::sliderMoved,player,&QMediaPlayer::setVolume);

    QMovie *movie=new QMovie(":/res/icons/giphy.gif");
    if (!movie->isValid())
    {
        // Something went wrong :(
    }
    ui->labelGif->setMovie(movie);
    movie->start();

    ui->widgetGif->setVisible(true);
}


MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_actionOpen_triggered()
{
    QString filename= QFileDialog::getOpenFileName(this,"Open Folder","","Open a File(*.*)");
    on_actionStop_triggered();
    player->setMedia(QUrl::fromLocalFile(filename));
    on_actionPlay_triggered();

    if(filename.endsWith(".mp3")){
        qDebug() << " file is mp3";

    }else{
        qDebug() << " not is mp3";

    }
}

Upvotes: 0

Views: 519

Answers (1)

Tarod
Tarod

Reputation: 7170

QMainWindow needs a centralWidget. You must use layouts to include your QVideoWidget and also your widgetGif and then set it as centralWidget of the QMainWindow.

In the following example, textEdit would be your QVideoWidget and the object label is like your widgetGif.

We have also two buttons to hide or show label using the method setVisible.

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class QLabel;
class QPushButton;
class QTextEdit;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QWidget *centralWidget;
    QLabel *label;
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QTextEdit *textEdit;

public slots:
    void showSlot();
    void hideSlot();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Vertical layout
    QVBoxLayout *mainLayout = new QVBoxLayout;

    // Widgets
    centralWidget = new QWidget(this);
    label = new QLabel();
    pushButton = new QPushButton();
    pushButton_2 = new QPushButton();
    textEdit = new QTextEdit();

    // Title and texts
    this->setWindowTitle("MainWindow");
    label->setText("TextLabel");
    pushButton->setText("Show");
    pushButton_2->setText("Hide");

    // Add widgets to layout
    mainLayout->addWidget(textEdit);
    mainLayout->addWidget(label);
    mainLayout->addWidget(pushButton);
    mainLayout->addWidget(pushButton_2);

    centralWidget->setLayout(mainLayout);

    // Set the central widget
    this->setCentralWidget(centralWidget);

    connect(pushButton, SIGNAL (clicked()), this, SLOT (showSlot()));
    connect(pushButton_2, SIGNAL (clicked()), this, SLOT (hideSlot()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showSlot()
{
    label->setVisible(true);
}

void MainWindow::hideSlot()
{
    label->setVisible(false);
}

Upvotes: 1

Related Questions