Przekazywanie parametrów do funkcji [QT]

0

Problem wygląda następująco, chciałbym aby podczas kliknięcia danego przycisku została wywoływana funkcja i zostały przekazane do niej parametry. Kod wygląda następująco:

mainwindow.hpp:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QPushButton>
#include <QLabel>


class MainWindow : public QMainWindow
{
   Q_OBJECT

private:
   QPushButton *przycisk1;
   QLabel * etykieta1;
   QPushButton * przycisk2;



public:
   MainWindow();


public slots:
   int foo(int a);




};


#endif // MAINWINDOW_H

 

main.cpp:

#include "mainwindow.hpp"


int main (int argc, char *argv[])
{


   QApplication app(argc, argv);
   MainWindow window;

   window.show();

   return app.exec();

}

 

mainwindow.cpp:

#include "mainwindow.hpp"


MainWindow::MainWindow()
{
    etykieta1 = new QLabel(tr("Czerwony"), this);
    etykieta1->setGeometry(5, 5, 150, 30);

    przycisk1 = new QPushButton(tr("&Nacisnij"), this);
    przycisk1->setGeometry(5, 30, 100, 30);

    przycisk2 = new QPushButton(tr("&Nacisnij"), this);
    przycisk2->setGeometry(5, 160, 100, 30);

    connect(przycisk1, SIGNAL(clicked()), this, SLOT(foo(1)));
    connect(przycisk2, SIGNAL(clicked()), this, SLOT(foo(2)));






    setMinimumSize(300, 300);
    resize(480, 320);
}

int MainWindow :: foo(int a)
{

if(a==1)etykieta1->setText(tr("Zielony"));
if(a==2)etykieta1->setText(tr("Niebieski"));

}

 

Gdzie popełniam błąd? Dodam, że gdy do funkcji nie dodam żadnych parametrów program działa.

0

Slot ma paramtery, nie posiada domyślnego parametru wieć jak nie podasz mu to program nie będzie działał.

Mozesz zrobić dwa osobne sloty - jeden zielony drugie niebieski ale wtedy będą bez parametrów.

Rozwiń przykład bo w tym nie przekazujesz parametrów, tylko je wstawiasz na sztywno. W tym przypadku raczej nie widzę innego rozwiązania.

0

"Slot ma paramtery, nie posiada domyślnego parametru wieć jak nie podasz mu to program nie będzie działał." Szczerze mówiąc nie rozumiem tego zdania... Według ciebie mam zrobić 2 oddzielne sloty, czyli jeden przycisk będzie odpowiadał za wywołanie jednej funkcji, a drugi za wywołanie drugiej funkcji tak?

0

Jest ktoś w stanie mi to wytłumaczyć? Rozwiązało by to sporo moich problemów...

0
z napisał(a):

Jest ktoś w stanie mi to wytłumaczyć? Rozwiązało by to sporo moich problemów...

Slot ma parametry czytaj -> slot(int, char, bla bla...)
Nie ma domyslnych parametrow czytaj -> slot(int = 0) <- nie istnieje!
Przy wywolaniu slota musisz mu podac ow parametry czytaj -> slot("babcia", 12, bla bla...).
// W twoim przykladzie ofc.

Jeszcze jedno bo nie czytalem calosci:
Mozesz zrobic 2 sloty np.
a()
b()
Nie przyjmujace zadnych parametrow, ale wywolywane tylko dla okreslonych zdarzen.

Np:
KolorujTlo(Kolor) {
Jezeli Kolor jest niebieski wywolaj slot Niebieski
Jezeli Kolor jest zielony wywolaj slot Zielony
}

Sloty:
Niebieski() {...}
Zielony() {...}

1

Najlepsze rozwiazanie to: QSignalMapper

QSignalMapper mapper = new QSignalMapper(etykieta1);
mapper->setMapping(przycisk1, tr("Zielony"));
mapper->setMapping(przycisk2, tr("Niebieski"));
connect(przycisk1, SIGNAL(clicked()), mapper, SLOT(map()));
connect(przycisk2, SIGNAL(clicked()), mapper, SLOT(map()));
connect(mapper, SIGNAL(mapped(QString)), etykieta1, SLOT(setText(String)));

1 użytkowników online, w tym zalogowanych: 0, gości: 1