extern - a zmienne lokalne.

0

Mam dwa okna w programie, mainwindow i dodajdialog.

W klasie okna mainwindow mam zdefiniowane główne pola całego programu. I teraz tworząc nowe okno potrzebuje odwołać się do obiektu klasy MainWindow, żeby zaktualizować jego zmienne.

No najprościej to było by zadeklarować obiekt MainWindow w pliku dodajdialog za pomocą "extern", ale obiekt MainWindow jest zdefiniowany lokalnie więc nie mogę tego zrobić.

Tak więc pytanie:

  1. Czy można z extern zadeklarować zmienną lokalną w jakiś sposób?
  2. Jak inaczej odwołać się do obiektu MainWindow z DodajDialog?
0

Co chcesz osiągnąć? Opisz, bo to co próbujesz do niczego dobrego Cię nie zaprowadzi ;)

0

Chcesz powiedzieć że nie powinienem klasy MainWindow traktować jako głównej klasy programu, tylko stworzyć osobną ? I używać jej jako globalnej?

0

void DodajDialog::on_dodaj_clicked()
{
    if(ui->rodzajComboBox->currentText()=="Pasażerski")
        {
            CPasazerski temp(ui->idLineEdit->text(),
                             ui->miejsceDoceloweLineEdit->text() );
            w.kolejka.append(temp);
            w.ui->hangarList->addItem(&w.kolejka[w.count]);
            w.count++;
        }
        if(ui->rodzajComboBox->currentText()=="Transportowy")
        {
            CTransportowy temp(ui->idLineEdit->text(),
                             ui->miejsceDoceloweLineEdit->text() );
            w.kolejka.append(temp);
            w.ui->hangarList->addItem(&w.kolejka[w.count]);
            w.count++;
        }
}
 

'kolejka', 'count' tak samo jak 'hangarList' należą do MainWindow;

1

W Twoim konkretnym przykładzie widzę dwa rozwiązania:

  1. Jeśli po wywołaniu on_dodaj_clicked() okno dialogowe się zamyka to po prostu dodajesz do dialogu metody pobierające dane.
// traktuj jak pseudokod
// jestesmy w MainWindow
Dialog d(this);
int result = d.exec();
if( d == QDialog::Accepted )
{
    d.pobieramWynik();
}
  1. Mechanizm czysto Qt. Definiujesz sygnał w dialogu, w MainWindow definiujesz slot i łączysz je w connect.
// dialog
signals:
   void ( typ, typ, typ)//jako typ to co chcesz uaktualnić
// mainwindow
slots:
   void aktualizuj( typ, typ, typ)// definiujesz metodę, odczytujesz wartości, aktualizujesz w niej

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