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.
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"...
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ę.
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.
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);
}
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)'