Qt creator komunikacja między okienkami

0

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

1

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

0
 Dialog1(vector <x> &bb);

to dalej mi nie działa

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};
}
0

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

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.

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.

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ć?

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();
}
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.

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