Я натыкаюсь на глупую проблему, и я совершенно новичок в Qt.
У меня есть класс (SoundSampler), который наследует сигнал от базового класса (BaseSampler), и этот сигнал подключается в конструкторе пользовательского интерфейса (MainWindow ) в слот пользовательского интерфейса (sampleAvailable()).
Эта проблема:
Даже если соединение установлено правильно (connect() возвращает true в классе пользовательского интерфейса, а isSignalconnected также возвращает true в классе SoundSampler), слот никогда не называется. ................................................. ..............................
Вот мой код (урезанный до необходимого):
Базовый сэмплер
class BaseSampler : public QObject
{
Q_OBJECT
public:
explicit BaseSampler(QObject *parent = 0);
void getSample();
signals:
void sampleAvailable(QByteArray *returnSample);
public slots:
virtual void getSample() = 0;
protected:
QByteArray *mSample;
};
Саундсэмплер
class SoundSampler : public BaseSampler
{
Q_OBJECT
public:
SoundSampler();
signals:
public slots:
void stopRecording();
void getSample();
private:
QAudioInput *mAudioInput;
QBuffer *mBuffer;
};
.................................................................................
void SoundSampler::stopRecording(){
...
mSample->append("test");
emit sampleAvailable(mSample);
qDebug() << "Signal emmited"; //this get properly displayed in output
}
Главное окно
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
public slots:
void sampleHandler(QByteArray*);
private:
QWidget *window;
SoundSampler *ss;
};
.................................................................................
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
window = new QWidget();
ss = new SoundSampler();
boutonStart = new QPushButton(tr("&Start"));
layout = new QHBoxLayout;
layout->addWidget(boutonStart);
window->setLayout(layout);
window->show();
connect(boutonStart, SIGNAL(clicked()),
ss, SLOT(getSample())); //This connection works
//The getSample() starts a Timer witch successfully calls the stopRecording slot
connect(ss, SIGNAL(sampleAvailable(QByteArray*)),
this, SLOT(sampleHandler(QByteArray*))); //This connection should work
//The connect returns true, indicating the connection happend.
}
//This slot is never called.
void MainWindow::sampleHandler(QByteArray *sample){
qDebug() << "Passed Value: " << *sample;
}
BaseSampler *ss;
вместоSoundSampler *ss;
- person vahancho   schedule 03.12.2013connect(boutonStart, SIGNAL(clicked()), this, SLOT(sampleHandler()));
Но он тоже не работает ... все еще исследую. (Конечно, я изменил sampleHandler, чтобы он не требовал никаких параметров) - person Thomas   schedule 03.12.2013