Qt Ui namespace odwołanie z innej klasy

0

W klasie MainWindow jest zdefiniowana przestrzeń nazw Ui:

namespace Ui {
class MainWindow;
} 

Potrzebuje odwołać się do obiektów znajdujących się w GUI MainWindow (QListWidget) z zaprzyjaźnionej klasy MainLoop.

Próbowałem na kilka sposobów ale nie mogę się do tego dokopać:

  1. Ui::MainWindow.powietrzeList->addItem(oczekujacy;);
  2. MainWindow::ui->powietrzeList->addItem(oczekujacy;);

Jednak nic z tego. Jakby ktoś miał chwile żeby nakreślić mi jaka jest funkcja tej przestrzeni, jakie korzyści mamy z niej i jak się odwołać do niej z innych klas? Dzięki

0
#include "mainloop.h"
#include "includes.h"
#include <QTimer>

extern MainWindow w;

MainLoop::MainLoop()
{
}

void MainLoop::run()
{
    while(1){
        if(MainWindow::oczekujace.empty()) continue;
        else{
            QTimer::singleShot(2000, this, SLOT(Move()));
        }
    }
}

void MainLoop::Move()
{
    QListWidgetItem* oczekujacy = MainWindow::oczekujace.first();
    w.ui->powietrzeList->addItem(oczekujacy);
    w.ui->lotniskoList->takeItem(oczekujacy->listWidget()->row(oczekujacy));
    MainWindow::oczekujace.removeFirst();

}
 

dodałem na początku extern MainWindow w, jednak otrzymuje "undefined reference to 'vtable for MainLoop" i "udefined reference to w"

2

Rozwiązaniem problemu jeśli koniecznie chcesz przekazać szablon ui gdzieś indziej jest dodanie do konstruktora wskaźnika na Ui::MainWindow po wywołaniu ui->setupUI() oraz oczywiście zaincludowanie odpowiedniego nagłówka np tak:

someClass::someClass(Ui::MainWindow *uiPointer);

Aczkolwiek grzebanie bezpośrednio w obiekcie UI jakiejś klasy imo świadczy o błędnym projekcie aplikacji,po bożemu należałoby ograniczyć komunikację wyłącznie do obiektu MainWindow.Jeśli istnieje potrzeba,aby udostępniać jakieś kontrolki z formy poza klasą to wypadałoby stworzyć zestaw getterów do nich.

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