QT nowa Klasa

PN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:19
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ą

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

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

Kopiuj
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

Kopiuj
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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 23 godziny
  • Lokalizacja:Szczecin
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.


MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
3

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

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

     ...

public signals:
     void zmianaStanu(const QString &stan);
};
...
void Pomocnicza::Utwoz(){
    emit zmianaStanu("WYKONANO");
}
Kopiuj
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)));
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
PN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:19
0

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

Kopiuj
void MainWindow::on_pushButton_clicked() 
{
Pomocnicza A(2,2);
A.Utwoz();
}
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
0
programer_new napisał(a):

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

Kopiuj
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
PN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:19
0

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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 godzin
0

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

PN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:19
0

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

PN
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:19
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.