Jak przesłać informacje ze zmiennych,do drugiego okna w QT

0

Hej , mam pustkę w głowie i nie mam pomysłu jak rozwiązać mój problem .
Chce zrobić przycisk , który po przechwyceniu informacji z formularza wpisanych przez użytkownika wyświetli je w drugim oknie . mam trzy pliki :

login.cpp
addinfo.cpp
dispinfo.cpp

W addinfo.cpp są 2 formularze imię i nazwisko.Dane zamykam w zmiennej w ten sposób
void addinfo::on_pushButton_clicked()
{
QString name,surrname;

name = ui->lineEdit_imie->text();
surrname = ui->lineEdit_2_nazwisko->text();

displayinfo thrdWindow;
thrdWindow.setModal(true);
thrdWindow.exec();

}

Informacje ,które tam trafią chcę wyświetlić w oknie dispinfo.cpp ,ale plik dispinfo.cpp nie widzi zmiennej imię ,która znajduje się w pliku addinfo.cpp

Dopiero zaczynam ,więc samo QT jest dla mnie dość nową rzeczą :). Podpowiecie coś ?

0

No to mainwindow (czy jak się ta klasa nazywa w której gnieżdżą się klasy addinfo i dispinfo ) musi pośredniczyć w wymianie danych między nimi. Możesz zrobić tak że po wciśnięciu przycisku klasa addinfo wysyła sygnał ( w qt można definiować własne sygnały, to po prostu deklaracja funkcji, a wysyłanie sygnału to emit nazwa_sygnału, takie coś możesz napisać w slocie przycisku), klasa mainwindow przechwytuje ten sygnał i odpala slot w którym klasy wymienią się informacjami za pomocą funkcji set i get czy jak je tam nazwiesz.

0

Hej , znasz/znacie może jakiś tutorial opisujący tworzenie slotow i sygnałow ? Próbuje znaleźć jakiś sensowny przykład step by step ,ale nic nie mogę znaleźć ...

0

Nie wiem czy znajdziesz coś wyczerpującego na necie po polsku, pozostaje nauczyć się z tego co jest i popatrzeć na przykłady i dokumentację z qt;
http://szymonsiarkiewicz.pl/poradniki/kurs-qt/kurs-qt-signals-slots/
http://blog.matthew.org.pl/2009/06/03/kurs-qt-czesc-1-sygnaly-sloty-i-wlasne-widgety/

0

Hasło: qt sharing data between windows
Wynik: https://stackoverflow.com/a/18262140

0

Czy ktoś mi wyjaśni bo zgłupiałem ...
Dlaczego otrzymuje takie błędy ? Nie wiem czy to kwestia tego ,że wszystko jest w jednym pliku ? czy mam to porozdzielać na miliard innych plików i łączyć ze sobą ..

Czemu tak na pozór proste rzeczy, jak przesłanie wartości zmiennej A do drugiego okna są tak okropnie trudne i słabo udokumentowane ,piszę że słabo bo jak dotąd nie znalazłem żadnego instruktarzu w którym pokazane jest jak tworzyć owy sygnał . Jedynie


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QObject>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


class MojSlot: public QObject
{
    Q_OBJECT

private:

    int m_value;

public:

    MojSlot(){ m_value=0;}

    int value() const {return m_value; }

signals:
    void valueChanged(int newValue);

public slots:
    void setValue(int value);

};

MojSlot::setValue(int value)
{
    if(value!= m_value)
    {

        m_value = value;
        emit valueChanged(value);
    }

}

MojSlot a,b;

QObject::connect(&a, SIGNAL(valueChanged(int)),&b, SLOT(setValue(int)));

```cpp


D:\QtProject\QtCreator\Sloty\mainwindow.cpp błąd: prototype for 'int MojSlot::setValue(int)' does not match any in class 'MojSlot'
MojSlot::setValue(int value)

D:\QtProject\QtCreator\Sloty\mainwindow.cpp błąd: candidate is: void MojSlot::setValue(int)
void setValue(int value);

D:\QtProject\QtCreator\Sloty\mainwindow.cpp błąd: expected constructor, destructor, or type conversion before '(' token
QObject::connect(&a, SIGNAL(valueChanged(int)),&b, SLOT(setValue(int)));

0

Wpakowałeś fragment kodu w globalny scope zamiast do wnętrza jakiejś funkcji.

0

addinfo.cpp

Ze względu na to ,że jest to okienko wyświetlające się zaraz po zalogowaniu prosi o imię i nazwisko- jak da nowego użytkownika .
Później po kliknięciu w button powinna zostać przypisana wartość z name do metody publicznej Gossip(), wydawało mi się ,że tylko tak mogę zachować zawartość inputa.
I w pliku displayinfo.cpp poprzez ui->disp_name->setText(); chciał bym przechwycić wartość wpisaną w input i wstawić ją do metody setText(Wynik);

Nie wiem czy dobrze opisałem ,jeśli nie proszę o info ,postaram się poprawić .

addinfo.cpp

void addinfo::on_pushButton_clicked()
{
    QString name,surrname;
    //----przechwyc text
    name = ui->lineEdit_imie->text();
    surrname = ui->lineEdit_2_nazwisko->text();

    //--obiekt przechwytuje name z inputa
    addinfo a;
    a.Gossip(name);

    //-----wysw okno------
    displayinfo thrdWindow;
    thrdWindow.setModal(true);
    thrdWindow.exec();

}tring addinfo::Listen(QString word)
{
   emit Speak(word);

}


void addinfo::Gossip(QString Word)
{
    emit Speak(Word);
}

dispinfo.cpp


displayinfo::displayinfo(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::displayinfo)
{

    ui->setupUi(this);
    addinfo nad,oddb;
    QString for_lab;
    connect(&nad,SIGNAL(Speak(QString)),&oddb,SLOT(Listen(QString)));
   
ui->disp_name->setText();<--- i tu utknąłem 

}

displayinfo::~displayinfo()
{
    delete ui;
}


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