ui was not declared in this scope

0

Potrzebuję się odwołać do ui->label w klasie, która znajduje się w innym pliku. W mainwindow.cpp normalnie piszę sobie ui->label->setText("abc"); ale kiedy tą samą linijkę napiszę np. w konstruktorze klasy to wyskakuje błąd kompilacji ui was not declared in this scope. Zgaduję, że trzeba coś dodać w nagłówku, albo przed ui, ale nie wiem co. Próbowałem include mainwindow.h i ui_mainwindow.h, ale nic to nie zmienia.

1

Szkoda słów. Niestety ale zanim zaczniesz sie bawić qt i okienkami musisz najpierw zrozumieć jak działa obiektowość i na czym polega wstrzykiwanie zależności.
Programowanie nie polega na klepaniu "na pałę" z nadzieją że "może zadziała"...

0

To jest na zaliczenie przedmiotu. Nie zdążyliśmy ruszyć w ogóle aplikacji okienkowych, a program semestralny z ich użyciem trzeba oddać na środę.

0

Ale ty nie masz problemu z okienkami tylko ze zrozumieniem jak działa obiektowość, a tego zapewne uczyłes sie cały semestr.
W wielkim skrócie: jeśli chcesz żeby obiekt pewnej klasy miał dostęp do obiektu innej klasy to musisz mu go jakoś przekazać na przykład w konstruktorze albo przez setter.

0

Lub też utwórz w twojej klasie sygnał, ktory podepniesz pod slot głównego okna aby zmienić zawartość labela.
Np:

twojclass.h

class TwojClass
{
 ...
 signals:
  void zmienLabel(QString newText);
 ...
 private:
  void jakasProcedura();
}

twojclass.cpp

void TwojClass::jakasProcedura()
{
 ...
  emit zmienLabel("Na ten nowy text");
}

MainWindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
	TwojClass *cl = new TwojClass();
	
	connect(cl, SIGNAL(zmienLabel(QString), ui->label, SLOT(setText(QString);
}
0

Dzięki, może mi się przyda, chociaż wolałbym mieć bezpośredni dostęp, bo będę mieć też bardziej zaawansowane funkcje

A wie ktoś jak poradzić sobie z takimi błędami (w linii z "connect..."):

błąd:macro "SIGNAL" passed 3 arguments, but takes just 1
błąd:'SIGNAL' was not declared in this scope

Nawiasy były źłe, ale teraz mam taki błąd:

błąd:undefined reference to `Rozgrywka::sigSetLabelText(QString)'

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