crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Пишет что нет такого слота, Подскажите
Roston
  опции профиля:
сообщение 12.3.2011, 4:32
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 11.2.2010
Пользователь №: 1463

Спасибо сказали: 2 раз(а)




Репутация:   0  


MediaPlayer.h
Раскрывающийся текст
#ifndef MEDIAPLAYER_H
#define MEDIAPLAYER_H

#include<QWidget>
#include<QKeyEvent>
#include<QPushButton>
#include<QHBoxLayout>
#include<QFileDialog>
#include<phonon>
#include<QMessageBox>
#include<QTimer>
#include<QSpinBox>
#include<QVBoxLayout>
#include<QGridLayout>

namespace Phonon
{
    class AudioOutput;
    class MediaObject;
}

//===================================

class Player:public QWidget
{
    Q_OBJECT

private:
    QTimer* timer[8];
    Phonon::AudioOutput* ao[8];
    Phonon::MediaObject* media[8];
    QSpinBox* spb[8];


public:
    Player (QWidget *parent = 0);
    void keyPressEvent(QKeyEvent *);

public slots:
    void slotLoad(int i);
    void timer_start(int i);

};

#endif // MEDIAPLAYER_H


MediaPlayer.cpp
Раскрывающийся текст
#include<MediaPlayer.h>


Player::Player(QWidget *parent):QWidget(parent)
{

    QPushButton *load[8];
    QVBoxLayout *vlayout = new QVBoxLayout;

    int i;
    for(i=0;i<8;i++)
    {

        media[i] = new Phonon::MediaObject(this);
        ao[i] = new Phonon::AudioOutput(Phonon::MusicCategory,this);
        spb[i] = new QSpinBox(this);
        timer[i] = new QTimer(this);

        Phonon::createPath(media[i],ao[i]);

        load[i] = new QPushButton ("Load");
        spb[i]->setRange(1,20);
        spb[i]->setValue(i+1);

        connect (load[i],SIGNAL(clicked()),SLOT(slotLoad(int i)));


        //==========================================>
        QHBoxLayout *hlayout = new QHBoxLayout;
        hlayout->addWidget(spb[i]);
        hlayout->addWidget(load[i]);

        vlayout->addLayout(hlayout);
    }
    setLayout(vlayout);
}
void Player::slotLoad(int i)
{
    QString str = QFileDialog::getOpenFileName(0, "Load", "", "*.mp3");
    if(!str.isEmpty())
    {
        media[i]->setCurrentSource(Phonon::MediaSource(str));
    }

}

void Player::keyPressEvent(QKeyEvent *e)
{
    switch(e->key())
    {
    case Qt::Key_F5:
        timer_start(0);
        break;
    case Qt::Key_F6:
        timer_start(1);
        break;
    }
}

void Player::timer_start(int i)
{
    timer[i]->start(spb[i]->value()*1000);
    connect(timer[i],SIGNAL(timeout()),media[i],SLOT(play()));
}


Когда компилирую пишет Object::connect: No such slot Player::slotLoad(int i)

Подскажите пожалуйста что это такое и как решить?
Ногами сильно не пинайте писать начал недавно ;)

Мне надо сделать так что бы в конце проигрывания первого трека, я мог запустить второй, и потом по надобности опять первый нажатием клавиш. Как это можно реализовать? ведь на сколько я понял когда доиграет одна песня то все пути где находятся медиафайлы собьются и их надо будет указывать еще раз?

Мне надо сделать так что бы в конце проигрывания первого трека, я мог запустить второй, и потом по надобности опять первый нажатием клавиш. Как это можно реализовать? ведь на сколько я понял когда доиграет одна песня то все пути где находятся медиафайлы собьются и их надо будет указывать еще раз?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 12.3.2011, 9:46
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


slotLoad(int i)
такого наверное действительно нет.
есть такой
slotLoad(int )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 12.3.2011, 10:09
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kwisp @ 12.3.2011, 9:46) *
slotLoad(int i)
такого наверное действительно нет.
есть такой
slotLoad(int )

+ слот slotLoad(int ) нельзя соединить с сигналом clicked(), они по параметрам не подходят.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Roston
  опции профиля:
сообщение 12.3.2011, 10:29
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 11.2.2010
Пользователь №: 1463

Спасибо сказали: 2 раз(а)




Репутация:   0  


А как это тогда сделать? что бы у меня было кнопок "Load"?

upd. имел ввиду 8 кнопок*
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 12.3.2011, 12:07
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(Roston @ 12.3.2011, 12:29) *
А как это тогда сделать? что бы у меня было кнопок "Load"?

upd. имел ввиду 8 кнопок*


Т.е при нажатии кнопки нужно чтобы вызывался слот slotLoad(int). Быть может создать свой сигнал signalLoad(int) и вызывать его в слоте clicked() кнопки: emit signalLoad(4);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.3.2011, 12:31
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


посмотри на QSignalMapper в частности его использование в примере calculator
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 15:17