Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在qt c+中找不到我的插槽+;?_C++_Qt_Qt5 - Fatal编程技术网

C++ 为什么在qt c+中找不到我的插槽+;?

C++ 为什么在qt c+中找不到我的插槽+;?,c++,qt,qt5,C++,Qt,Qt5,我在尝试将此按钮连接到播放已编码媒体的功能时被卡住了一段时间。它给出了同样的错误。是的,我在类中包含了Q_对象。发生什么事了 在my main window.cpp中: #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi

我在尝试将此按钮连接到播放已编码媒体的功能时被卡住了一段时间。它给出了同样的错误。是的,我在类中包含了Q_对象。发生什么事了

在my main window.cpp中:

#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_对象,但我得到一个错误

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
这是主窗口头文件。有没有什么我遗漏的,甚至是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
\ifndef主窗口
#定义主窗口
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
私人:
播放器*媒体文件;
Ui::MainWindow*Ui;
};
#endif//main窗口
最后,伙计们,如果你们有更简单的方法,我想听听。
但是请告诉我我在这里做错了什么,我以后会知道的。

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

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

main window.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
#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

什么是
文件
?它是我用于该函数的参数的名称。当您在插槽中使用参数时,如果您意识到该参数不合适,则从信号接收数据。噢,我不知道它如此紧密地工作。那我该怎么做呢?因为我尝试将参数取出,并在类中使用另一个变量执行函数。但后来程序崩溃了。检查并测试我的解决方案。它工作了!老实说,老兄,我真的要谢谢你,真的很感激。我有一个问题,因为我有不必要的指针指向playFile中的函数
#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;
}
#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
#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();
}