为什么我的插槽没有在qt c ++中找到?

时间:2017-08-04 03:25:42

标签: c++ qt qt5

我一直试图将这个pushButton连接到一个播放已经编码的媒体的函数。它给出了同样的错误。是的我在课程中包含了Q_Object。发生了什么

在我的主窗口中:。

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    mediafile = new Player;
    connect(ui->pushButton, SIGNAL(pressed()),mediafile,SLOT(playFile(mediafile)));
}
MainWindow::~MainWindow()
{
    delete ui;
}

我的课程中有q_object但是我收到错误

QObject::connect: No such slot Player::playFile(mediafile) in     ../musicplayer/mainwindow.cpp:12
QObject::connect:  (sender name:   'pushButton')

我不明白为什么我得到这个我在Player命名空间类

中有一个名为playFile的函数
#ifndef PLAYER_H
#define PLAYER_H
#include <QMediaPlayer>
#include <QDebug>

class Player : public QMediaPlayer
{
    Q_OBJECT

public:
    Player();
    ~Player();


public slots:
    void playFile(Player *);

private:
    //Player file;

};

#endif // PLAYER_H

这是实施。

#include "player.h"
#include "mainwindow.h"
Player::Player() {
}
Player::~Player(){
    //delete file;
}
void Player::playFile(Player* file){
    file->setMedia(QUrl::fromLocalFile("Average White Band - Overture.mp3"));
    file->setVolume(50);
    file->play();
}

这是主窗口头文件。是否有一些我想念的东西甚至可能是关于qt

的基础知识
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <player.h>
namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:

    Player *mediafile;
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

最后,如果你有一个更容易的方式,我想听听它。 但是告诉我这里我做错了什么,以后我会知道......

1 个答案:

答案 0 :(得分:1)

插槽中使用的参数是从信号接收参数,在您的情况下,没有必要。

另一个问题是,在继承自QMediaPlayer的类中,您没有调用父构造函数,因此您必须将代码修改为以下内容:

<强> mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "player.h"

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
    Player *mediafile;
};

#endif // MAINWINDOW_H

<强> mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    mediafile = new Player;
    connect(ui->pushButton, SIGNAL(pressed()), mediafile, SLOT(playFile()));
}

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

<强> player.h

#ifndef PLAYER_H
#define PLAYER_H

#include <QMediaPlayer>

class Player : public QMediaPlayer
{
    Q_OBJECT
public:
    Player(QObject *parent = Q_NULLPTR, Flags flags = Flags());
    ~Player();
public slots:
    void playFile();
};

#endif // PLAYER_H

<强> player.cpp

#include "player.h"

Player::Player(QObject *parent, Flags flags):QMediaPlayer(parent, flags)
{

}

Player::~Player()
{

}

void Player::playFile()
{
    setMedia(QUrl::fromLocalFile("/home/eyllanesc/Music/Coldplay/A Rush of Blood to the Head/Track 8.mp3"));
    setVolume(50);
    play();
}