QT nowa Klasa

0

Witam,
Zacząłem pisać w Qt pewien program i do tej pory wszystko wiedziałem z głównego pliku wyświetlałem za pomocą

ui->pushButton->setText(“WYKONANO”)

ale zrobiłem nową klasę "pomocnicza" w której mam

Pomocnicza::pomocnicza(int e, int y)
{
    this->e = e;
    this->y = y;

}
void Pomocnicza::Utwoz(){
ui->pushButton->setText("WYKONANO");
}

i wyświetla mi błąd: 'ui' was not declared in this scope"
jeśli dodam

MainWindow::ui->pushButton->setText("WYKONANO");

to mi wyświetla że jest prywatne a jak przeniose ui do public (w mainwindow.h) błąd: invalid use of non-static data member
Proszę o pomoc

1

ui jest niestatycznym członkiem klasy MainWindow. Jeśli koniecznie musisz się do niego odwołać z zewnątrz, potrzebujesz dostępu do instancji tejże klasy. Zastanów się jednak nad designem, prawdopodobnie cała Twoja klasa pomocnicza jest zbędna.

3

najważniejszy feature w Qt są sygnały i sloty.
Zrób sygnał, wyemituj go i podłącz do tego co trzeba.

class Pomocnicza : public QObject {
     Q_OBJECT
public:
     explicit Pomocnicza(QObject *parent);

     ...

public signals:
     void zmianaStanu(const QString &stan);
};
...
void Pomocnicza::Utwoz(){
    emit zmianaStanu("WYKONANO");
}
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
     setupUi(ui);// z pamięci więc może jest inaczej
     ...
     twojObiekt = new Pomocnicza(this);
     connet(twojObiekt, SIGNAL(zmianaStanu(QString)),
               ui->pushButton, SLOT(setText(QString)));
}
0

Czyli o takim kodzie w oknie głównym mogę zapomnieć ?

void MainWindow::on_pushButton_clicked() 
{
Pomocnicza A(2,2);
A.Utwoz();
}
0
programer_new napisał(a):

Czyli o takim kodzie w oknie głównym mogę zapomnieć ?

void MainWindow::on_pushButton_clicked() 
{
Pomocnicza A(2,2);
A.Utwoz();
}

Niekoniecznie.
Jeśli po konstruktorze dodasz connect to też zadziała.
Pytanie czy takie podejście jest prawidłowe? Nie wiadomo jaka logika siedzi za tą twoją klasą i czy obiekt lokalny w tym wypadku jest uzasadnionym rozwiązaniem.

0

A nie da się jakoś zrobić żebym w tej nowej klasie też mógł korzystać z ui tak jak w głównej ?

0

Da się, ale to nie jest dobry pomysł. Bo oznacza że mieszasz logikę biznesową (twoja nowa klasa) z warstwą prezentacji (GUI).

0

Tylko że bardzo mi na tym zależy. Mógłbyś mi powiedzieć jak to zrobić ?

0

Podsyłam przykładowy program jeśli ktoś jest w stanie mi pomóc proszę żeby zrobił to na bazie tego programu resztę sam ogarnę wystarczy że to będzie działało.

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