Russian Qt Forum
Сентябрь 30, 2024, 20:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странный глюк с сигналами...  (Прочитано 2226 раз)
Я.К.
Гость
« : Май 23, 2009, 17:35 »

Есть виджет, который подает сигналы. Есть другой, который эти сигналы должен бы принять. Однако ничего не просиходит. Где у меня ошибка?
тот, кто подает:
Код:
#ifndef PLAYLISTCONTROLBUTTONWIDGET_H
#define PLAYLISTCONTROLBUTTONWIDGET_H

#include <QWidget>
#include "ui_playlistcontrolbuttonwidget.h"

using namespace Ui;

#include <iostream>
using namespace std;

class PlaylistControlButtonWidget : public QWidget, public PlaylistControlButtonWidgetClass
{
Q_OBJECT

public:
PlaylistControlButtonWidget(QWidget *parent = 0);
~PlaylistControlButtonWidget();

private slots:
void on_seekSlider_valueChanged(int);
void on_prevButton_clicked();
void on_playRandomButton_clicked();
void on_nextButton_clicked();
void on_playButton_clicked();
void on_stopButton_clicked();
void on_pauseButton_clicked();

signals:
void Pause(void);
void Stop(void);
void Play(void);
void Prev(void);
void Rand(void);
void Next(void);
void SeekSliderChanged(int pos, int total);


};
#endif // PLAYLISTCONTROLBUTTONWIDGET_H


Код:
#include "playlistcontrolbuttonwidget.h"

PlaylistControlButtonWidget::PlaylistControlButtonWidget(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
}

PlaylistControlButtonWidget::~PlaylistControlButtonWidget()
{
}

void PlaylistControlButtonWidget::on_pauseButton_clicked()
{
emit Pause();
}

void PlaylistControlButtonWidget::on_stopButton_clicked()
{
emit Stop();
}

void PlaylistControlButtonWidget::on_playButton_clicked()
{
cout << "PLY"<<endl;
emit Play();
}

void PlaylistControlButtonWidget::on_nextButton_clicked()
{
emit Next();
}

void PlaylistControlButtonWidget::on_playRandomButton_clicked()
{
emit Rand();
}

void PlaylistControlButtonWidget::on_prevButton_clicked()
{
emit Prev();
}

void PlaylistControlButtonWidget::on_seekSlider_valueChanged(int pos)
{
emit SeekSliderChanged(pos, 1000);
}


тот, что принимает:

Код:
#ifndef PLAYLISTVIEWWIDGET_H
#define PLAYLISTVIEWWIDGET_H
#include <QtGui/QtGui>
#include <QtCore/QtCore>
#include <QWidget>
#include "ui_playlistviewwidget.h"

#include "playlistcontrolbuttonwidget.h"

using namespace Ui;

#include <iostream>
using namespace std;


class PlaylistViewWidget : public QWidget, public PlaylistViewWidgetClass
{
Q_OBJECT
public:
PlaylistViewWidget(QWidget *parent = 0);
~PlaylistViewWidget();

QTableView* tableView;
QWidget* playlistControlsWidget;
QToolBar* playbackToolBar;
QMenu* playbackMenu;

public slots:
void OnCurrentChanged(int newTabIndex);
void OnPlay();//обработчики
void OnNext();
void OnPrev();
void OnRand();
void OnPause();
void OnSeek(int pos, int total);


signals:
void AddTracksRequest(QStringList trackPaths);
void CurrentPlaylistChanged(int newTabId);
void CurrentTrackChanged(int newTrackId);
void PlayCurrent();
void PauseUnpause();

};

#endif // PLAYLISTVIEWWIDGET_H

Код:
#include "playlistviewwidget.h"

PlaylistViewWidget::PlaylistViewWidget(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
playlistControlsWidget = new PlaylistControlButtonWidget;
cout << "@@@"<<endl;
// void OnPlay();//обработчики
// void OnNext();
// void OnPrev();
// void OnRand();
// void OnPause();
// void OnSeek(int pos);
playbackToolBar = new QToolBar("Playback Toolbar");
playbackToolBar->addWidget(playlistControlsWidget);

cout <<connect(playlistControlsWidget, SIGNAL(Play()), this, SLOT(OnPlay()) )<<endl;
cout << connect(playlistControlsWidget, SIGNAL(Next()), this, SLOT(OnNext()) )<<endl;
cout << connect(playlistControlsWidget, SIGNAL(Prev()), this, SLOT(OnPrev()) )<<endl;
cout << connect(playlistControlsWidget, SIGNAL(Rand()), this, SLOT(OnRand()) )<<endl;
cout << connect(playlistControlsWidget, SIGNAL(Pause()), this, SLOT(OnPause()) )<<endl;
cout << connect(playlistControlsWidget, SIGNAL(SeekSliderChanged(int, int)), this, SLOT(OnSeek(int, int)) )<<endl;

cout << connect(playlistTabWidget, SIGNAL(currentChanged(int)), this, SLOT(OnCurrentChanged(int)))<<endl;

}

PlaylistViewWidget::~PlaylistViewWidget()
{

}

void PlaylistViewWidget::OnCurrentChanged( int newTabIndex)
{
exit(-1);
cout << "CurChan "<<newTabIndex<<endl;
}

void PlaylistViewWidget::OnPlay()
{
exit(-1);
cout << "play "<<endl;
}

void PlaylistViewWidget::OnNext()
{
cout << "nxt "<<endl;
}

void PlaylistViewWidget::OnPrev()
{
cout << "prev "<<endl;
}

void PlaylistViewWidget::OnRand()
{
cout << "rand "<<endl;
}

void PlaylistViewWidget::OnPause()
{
cout << "pause "<<endl;
}

void PlaylistViewWidget::OnSeek( int pos, int total )
{
cout << "seek "<<pos<<endl;
}

вроде как последний должен выводить на консоль текстом, если он что-то принял, но он не принимает. Выводится только "PLY", т.е. обработчик нажатия на кнопку, который должен подать сигнал из первого виджета, при том, что connect'ы возвращают 1, то есть работают. Как это все исправить?
« Последнее редактирование: Май 23, 2009, 17:39 от Я.К. » Записан
sLiva
Гость
« Ответ #1 : Май 23, 2009, 18:34 »

А вот это разве не завершает работу проги ?
Код:
void PlaylistViewWidget::OnPlay()
{
exit(-1); // <----
cout << "play "<<endl;
}

Кстати можно связывать коннектом сигнал сигнал, чтобы этого не делать:

Код:
void PlaylistControlButtonWidget::on_stopButton_clicked()
{
emit Stop();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.062 секунд. Запросов: 20.