Miszcz Napisano Listopad 3, 2011 Zgłoszenie Share Napisano Listopad 3, 2011 Witam, od niedawna zaczalem programowac w QT, i natknalem sie na problem. Nie potrafie polaczyc ze soba dwóch róznych obiektów poprzez mechanizmu sygnalu i slotów.Konkretnie to mam dwie oddzielne klasy nazwane MainWindow i Tab. Poprzez przycisk w klasie Tab próbuje polaczyc sie z publicznym slotem w MainWindow w ten sposób: connect(btnRandomize,SIGNAL(clicked()),MainWindow,SLOT(randomize())); I pojawia sie blad: error: expected primary-expression before ‘,’ token Próbowalem juz chyba wszystkiego co mówi wujek Google, ale za nic nie moge przejsc tego problemu. Dodam, ze o obiektywnosci mam nikle pojecie. EDIT- W swoim programie próbuje zrobic cos takiego: #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } void MainWindow::randomer(){ close(); } MainWindow::~MainWindow() { delete ui; } =================================== #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } void MainWindow::randomer(){ close(); } MainWindow::~MainWindow() { delete ui; } #ifndef TAB_H #define TAB_H #include <QWidget> #include <QPushButton> class tab : public QWidget { Q_OBJECT QPushButton *butonek; public: explicit tab(QWidget *parent = 0); signals: public slots: }; #endif // TAB_H =========================================== ========================================== #include "tab.h" #include "mainwindow.h" Tab::Tab(QWidget *parent) : QWidget(parent) { butonek = new QPushButton; butonek->show(); connect(butonek,SIGNAL(clicked()),*MainWindow,SLOT(randomer())); } ======================================================== Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Listopad 4, 2011 Zgłoszenie Share Napisano Listopad 4, 2011 connect(butonek,SIGNAL(clicked()),*MainWindow,SLOT(randomer())); Po pierwsze to nie wiem skąd gwiazda przy MainWindow, a po drugie to z punktu widzenia klasy Tab obiekt MainWindow nie jest raczej nie istnieje. W ogóle to nawet poprawienie tego nie sprawi, że program zacznie działać, no chyba, że to co wkleiłeś to nie jest całość. Nie znam Qt, ale wrzuć tutorial, z którego korzystałeś to może będę mógł poprawić. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Listopad 4, 2011 Zgłoszenie Share Napisano Listopad 4, 2011 I pojawia sie blad: error: expected primary-expression before ‘,’ token Zapomniales wkleic w którym znaku jest ten blad.. A polaczenie chyba powinienes zrobic w konstruktorze klasy MainWindow, a nie Tab, bo przycisk masz w MainWindow. connect(butonek, SIGNAL(clicked()), this, SLOT(randomer())); No, chyba ze czegos nie zrozumialem. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Miszcz Napisano Listopad 5, 2011 Autor Zgłoszenie Share Napisano Listopad 5, 2011 Problem rozwiązałem sam podglądając kod Kadu Niestety w internecie niezbyt wiele pisze o tym problemie, dlatego zamieszczam rozwiązanie dla potomnych z komentarzami: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtGui/QMainWindow> #include <QLabel> #include "tab.h" class MainWindow : public QMainWindow { Q_OBJECT QLabel *label; TabClass *tb; private slots: void chLabel(); public: MainWindow(QWidget *parent = 0); ~MainWindow(); }; #endif // MAINWINDOW_H #include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { label = new QLabel("Niezmieniony tekst",this); tb = new TabClass(this); label->setGeometry(9,9,200,25); tb->setGeometry(10,40,100,25); connect(tb,SIGNAL(signal()),this,SLOT(chLabel())); //4. Odbior sygnału i wykonanie własnego slotu } void MainWindow::chLabel(){ label->setText("Nacisnieto przycisk z innej klasy"); } MainWindow::~MainWindow() { } #ifndef TAB_H #define TAB_H #include <QWidget> #include <QPushButton> class TabClass : public QWidget { Q_OBJECT QPushButton *buton; public: explicit TabClass(QWidget *parent = 0); signals: void signal(); //3. Utworzenie sygnału private slots: void sendSignal(); // 1.Utworzenie slotu }; #endif // TAB_H #include "tab.h" TabClass::TabClass(QWidget *parent) : QWidget(parent) { buton = new QPushButton(tr("Przycisk"),this); buton->show(); connect(buton,SIGNAL(clicked()),this,SLOT(sendSignal())); //2. Połączenie przycisku z wlasnym slotem } void TabClass::sendSignal(){ //1. Utworzenie slotu emit signal(); //3. Nadanie sygnału do wszystkich odbiorcow } No i dzięki za zainteresowanie. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się