Skocz do zawartości

Qt- Łączenie Różnych Obiektów


Miszcz

Rekomendowane odpowiedzi

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

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

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

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. B)

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
×
×
  • Dodaj nową pozycję...