Qt creator komunikacja między okienkami

Odpowiedz Nowy wątek
2015-06-14 00:00

Rejestracja: 5 lat temu

Ostatnio: 4 lata temu

0

Witam, mógłby mi ktoś powiedzieć jak zrobić, aby vector <x> A z okienka1 był też widoczny dla okienka2?

Pozostało 580 znaków

2015-06-14 00:31

Rejestracja: 6 lat temu

Ostatnio: 2 godziny temu

1

Przekaż przez konstruktor drugiego okna wskaźnik/referencje do tego wektora.

Pozostało 580 znaków

2015-06-14 08:34

Rejestracja: 5 lat temu

Ostatnio: 4 lata temu

0
 Dialog1(vector <x> &bb);

to dalej mi nie działa

Pozostało 580 znaków

2015-06-14 13:27

Rejestracja: 9 lat temu

Ostatnio: 1 dzień temu

0
/*Hello*/ try this->way('!'):

Twój plik Dialog.hpp powinien wyglądać mniej więcej tak:

#ifndef DIALOG_HPP
#define DIALOG_HPP

#include <QDialog>
#include <QVector>

#include "MagicX.hpp"

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QVector<MagicX>& vectorOfMagicX) : 
        mVectorOfMagicX{vectorOfMagicX} {}

    /*...*/
private:
    QVector<MagicX>& mVectorOfMagicX;
};

#endif // DIALOG_HPP

W pliku MainWindow.cpp tworzysz obiekt klasy Dialog i przekazujesz daną składową mVectorOfMagicX klasy MainWindow:

#include "MainWindow.hpp"

#include "Dialog.hpp"

/*...*/

void MainWindow::openDialog()
{
    Dialog dialog{mVectorOfMagicX};
}
edytowany 1x, ostatnio: EvilOne, 2015-06-14 16:16

Pozostało 580 znaków

2015-06-14 16:04

Rejestracja: 5 lat temu

Ostatnio: 4 lata temu

0

Taki błąd mi wywala: C2758: "Dialog1::przys" : musi być zainicjowany w konstruktorze bazowej/członkowskiej liście incjatorów

pokaż nam swój kod. - EvilOne 2015-06-14 16:18

Pozostało 580 znaków

2015-06-14 16:39

Rejestracja: 5 lat temu

Ostatnio: 4 lata temu

0

Fragmenty kodu


Dialog1.h

public:
    explicit Dialog1(QWidget *parent = 0);
    Dialog1(vector <Przystanek>& przystanki);
private:
    Ui::Dialog1 *ui;
    QGraphicsScene *scene;

    vector <Przystanek>& przystanki;

ztm.cpp

ztm::ztm(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ztm)
{
    ui->setupUi(this);
    vector <Przystanek> przystanki;
    scene=new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
}

void ztm::on_pushButton_2_clicked()
{
Dialog1 okno(przystanki);
    okno.setModal(true);
    okno.exec();
}

W klasie ztm wczytuje sobie dane z pliku do vectora i wywołuje okno, w którym chciałbym mieć również dostęp do tego vectora.

edytowany 1x, ostatnio: rfid9, 2015-06-14 19:37
nazwa klasy ztm jest straszna? Czy ten sposób oszczędzasz na zajętości dysku? - MarekR22 2015-06-15 12:17

Pozostało 580 znaków

2015-06-14 19:10

Rejestracja: 9 lat temu

Ostatnio: 1 dzień temu

0

podany przez Ciebie błąd C2758: "Dialog1::przys" : musi być zainicjowany w konstruktorze bazowej/członkowskiej liście incjatorów sugeruje, że zapomniałeś o inicjalizacji referencyjnej danej składowej klasy Dialog1. Zerknij do faktycznego pliku Dialog1.cpp i sprawdź, jak wygląda lista inicjalizacyjna konstruktora tej klasy (w pierwszym poście podałem, jak to powinno wyglądać).

Podany przez Ciebie plik nagłówkowy Dialog1.cpp zawiera definicję funkcji składowych klasy ztm. Troszkę tak namieszane jednym słowem.

edytowany 1x, ostatnio: EvilOne, 2015-06-14 19:13
rzeczywiście, pomyliłem się. Mógłbyś zerknąć i powiedzieć co robię źle? - rfid9 2015-06-14 19:38
tak, (nie widzę źródła Dialog1.cpp) najpierw sprawdź listę inicjalizacyjną klasy Dialog1, bo wygląda na to, że nie inicjalizujesz na niej zmiennej referencyjnej. - EvilOne 2015-06-14 19:47

Pozostało 580 znaków

Mały Orzeł
2015-06-14 20:19
Mały Orzeł
0

Dialog1.cpp


Dialog1::Dialog1(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog1)
{   vector <Przystanek> przystanki;
    ui->setupUi(this);
    scene=new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    square = new MySquare();
    scene->addItem(square);

}

trochę nie ogarniam. Jak mam to tutaj zainicjalizować?

Pozostało 580 znaków

2015-06-15 01:14

Rejestracja: 9 lat temu

Ostatnio: 1 dzień temu

0

W Dialog1.hpp samej deklaracji klasy konstruktor i dana składowa ma wyglądać tak:

explicit Dialog1(QVector<Przystanek>& przystanki, QWidget* parent = 0);

QVector<Przystanek>& mPrzystanki;

W Dialog1.cpp definicja konstruktora i jego lista inicjalizacyjna ma wyglądać tak:

Dialog1::Dialog1(QVector<Przystanek>& przystanki, QWidget* parent) :
    QDialog(parent),
    ui(new Ui::Dialog1),
    mPrzystanki(przystanki)

W ztm.cpp zastanawiam się tylko po co definiujesz w konstruktorze vector <Przystanek> przystanki? To ma być dana składowa klasy i zmień ją na QVector<Przystanek>& mPrzystanki. Na koniec wywołanie:

void ztm::on_pushButton_2_clicked()
{
    Dialog1 okno(mPrzystanki);
    okno.setModal(true);
    okno.exec();
}
edytowany 2x, ostatnio: EvilOne, 2015-06-15 01:19

Pozostało 580 znaków

2015-06-15 12:19

Rejestracja: 12 lat temu

Ostatnio: 26 sekund temu

0

Prawda jest taka, że zgodnie ze wzorcem MVC to ten wektor powinien być zamknięty w osobnej klasie (pochodnej QObject) i ten obiekt powinien być współdzielony między oknami.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz

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