Название: Странный глюк с сигналами...
Отправлено: Я.К. от Май 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, то есть работают. Как это все исправить?
Название: Re: Странный глюк с сигналами...
Отправлено: sLiva от Май 23, 2009, 18:34
А вот это разве не завершает работу проги ? void PlaylistViewWidget::OnPlay() { exit(-1); // <---- cout << "play "<<endl; } Кстати можно связывать коннектом сигнал сигнал, чтобы этого не делать: void PlaylistControlButtonWidget::on_stopButton_clicked() { emit Stop(); }
|