当有人能帮助我的时候,我会很感激。我不习惯C ++。我是新手。
我的问题:我想让一个对象“播放器”可用于另一个类。我不知道怎么归档这个。
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
#include <QMainWindow>
#include <QMediaPlayer>
#include <QDebug>
#include "Leap.h"
#include <leapmotionlistener.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QMediaPlayer* player;
private slots:
....
private:
Ui::MainWindow *ui;
void initialize();
Controller controller;
LeapMotionListener leapMotionListener;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSound>
#include <iostream>
#include <QfileDialog>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
player = new QMediaPlayer(this);
connect(player, &QMediaPlayer::positionChanged, this, &MainWindow::on_positionChanged);
connect(player, &QMediaPlayer::durationChanged, this, &MainWindow::on_durationChanged);
initialize();
}
QString path;
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initialize(){
controller.addListener(leapMotionListener);
leapMotionListener.setPlayer(player);
controller.setPolicy(Leap::Controller::POLICY_BACKGROUND_FRAMES);
}
...
leapmotionlistener.h
#ifndef LEAPMOTIONLISTENER
#define LEAPMOTIONLISTENER
#include <iostream>
#include <cstring>
#include "Leap.h"
#include <QFile>
#include <QAudioOutput>
#include <QMediaPlayer>
using namespace Leap;
class LeapMotionListener : public Listener {
public:
LeapMotionListener();
void setPlayer(QMediaPlayer&);
//... some more methods
private:
QMediaPlayer player;
};
#endif // LEAPMOTIONLISTENER
leapmotionlistener.cpp
//calls the player object in one method like the following
player.stop();
我的主要问题是:在引用和实例化时我做错了什么? leapmotionlistener如何访问同一个播放器对象(我想影响音频)?
我收到错误:
MusicPlayer\mainwindow.cpp:32: Error: C2664: 'void LeapMotionListener::setPlayer(QMediaPlayer &)' : converting from argument 1 'QMediaPlayer *' in 'QMediaPlayer &' not possible
这个小项目可以通过以下链接快速查看: https://www.dropbox.com/s/igr7ywnvicdlxxd/MusicPlayer.zip?dl=0
提前致谢!
答案 0 :(得分:2)
您需要做的就是
leapMotionListener.setPlayer(*player);
左值引用绑定到对象,而不是指向对象的指针。为了从指向它的指针获取对象,您需要使用*
取消引用指针。
答案 1 :(得分:0)
除了其他问题之外,您尝试传递给setPlayer的QMediaPlayer是一个指针,而不是对象的引用。
您可以像这样实例化播放器对象:
QMediaPlayer player;
或者您可以将setPlayer函数签名更改为:
void setPlayer(QMediaPlayer* mplayer);
如果您更新了功能签名,那么您还需要修复其他功能签名,并在引用播放器时将&符号从connect()语句中删除。
答案 2 :(得分:0)
现在有以下工作:
在MainWindow.h中:
public:
QMediaPlayer* player;
MainWindow.cpp中的:
player = new QMediaPlayer(this);
leapMotionListener.setPlayer(player);
controller.addListener(leapMotionListener);
在LeapMotionListener.h中:
private:
QMediaPlayer *player;
public:
void setPlayer(QMediaPlayer *mplayer);
在LeapMotionListener.cpp中:
LeapMotionListener::LeapMotionListener()
: player(0)
{}
void LeapMotionListener::setPlayer(QMediaPlayer *mplayer){
player = mplayer;
}