Witam, mógłby mi ktoś powiedzieć jak zrobić, aby vector <x> A z okienka1 był też widoczny dla okienka2?
Przekaż przez konstruktor drugiego okna wskaźnik/referencje do tego wektora.
Dialog1(vector <x> &bb);
to dalej mi nie działa
/*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};
}
Taki błąd mi wywala: C2758: "Dialog1::przys" : musi być zainicjowany w konstruktorze bazowej/członkowskiej liście incjatorów
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.
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.
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ć?
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();
}
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.