Dziedziczenie po QWidget a spięcie sygnału i slotu

0

Witam.

Mam klasę:

class classA : public QWidget
{
  // Q_OBJECT 
  public:
    QPushButton button;
};

Pod ten przycisk chciałbym podpiąć jakąś akcję, ale dodając makro Q_OBJECT dostaję błędy.
Aby można było dodać makro Q_OBJECT to chyba trzeba dziedziczyć do QObject, QMainWindow .. jeśli się mylę to proszę o poprawienie.
Jak podpiąć jakąś akcję pod ten przycisk?

0

Bez tego makra nic nie zdziałasz. Pewnie utworzyłeś nową klasę i od razu przebudowałeś projekt.
Wyczyść cały projekt, dodaj te makro, usuń wszystkie MOCe, otwórz plik .pro i dodaj enter na końcu i zapisz. Potem jeszcze raz przebuduj.

BTW. Wszystkie klasy z Qt dziedziczą po QObject, tak jak w Javie wszystko dziedziczy po Object.

0

Warunkiem możliwości użycia makra Q_OBJECT jest dziedziczenie bezpośrednie lub pośrednie klasy QObject-zatem dziedziczenie po QWidgecie też będzie dobre.
Natomiast co rozumiesz jako "podpięcie akcji"?Jeśli chcesz,aby po kliknięciu guzika twoja klasa coś robiła,podepnij sygnał guzika clicked() do swojego slotu:

class classA : public QWidget
{
  Q_OBJECT 

  public slots:
  void yourSlot(void)
  {
     QMessageBox::about(0,0,"Kliknąłeś guzik");
  }
  public:
    QPushButton button;
};

classA::classA(void)
{
  connect(&button,SIGNAL(clicked()),this,SLOT(yourSlot()));
}

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