Hi,
was ich nicht verstehe ist, warum du eine setText()-Methode implementieren willst, obwohl die Klasse QPushButton bereits eine setText()-Methode hat?
Auszug aus der Doku von QPushButton:
Push buttons display a textual label, and optionally a small icon. These can be set using the constructors and changed later using setText() and setIcon()
Also wozu der Aufwand?
Zu Signal und Slot:
Wenn du folgendes hast:
QObject::connect(btnClose, SIGNAL(clicked()), mainWindow, SLOT(close()));
Dann könntest du bei SIGNAL() und SLOT() alles möglich reinschreiben, ohne das erstmal der Compiler meckert. Der Grund ist, dass SIGNAL und SLOT Macros sind, die das Übergebene in Strings umwandeln.
Also wenn z. B.
QObject::connect(btnClose, SIGNAL(clicked()), mainWindow, SLOT(gibtsNicht()))
schreibst, sagt der Compiler nichts, aber QObject::connect() würde false zurückliefern, weil der Slot gibtsNicht in der Klasse MainWindow nicht definiert wurde.
Bei der Definition eines Slots musst du folgendes beachten:
- ein Slot muss immer den Rückgabetyp void haben
- eine Klasse, in der Slots definiert werden, muss direkt oder indirekt von QObject abgeleitet sein
Wenn du ein Slot mit einem Signal verbindest, musst du außerdem darauf achten, dass die Signatur von Signal und Slot identisch ist.
Eine Definition könnte wie folgt ausschauen:
Code: Alles auswählen
//MainWindow.hpp:
class MainWindow : public QMainWindow
{
Q_OBJECT //muss angegeben werden
public slots:
void showMessage(void);
...
};
//MainWindow.cpp:
void MainWindow::showMessage(void)
{
QMessageBox mb;
mb.setText("Juhu, mein erster Slot!");
mb.exec();
}
//Main.cpp:
int main(...)
{
MainWindow* pMainWindow = new MainWindow();
QPushButton* pBtnShow = new QPushButton(pMainWindow);
QObject::connect(pBtnShow, SIGNAL(clicked()), pMainWindow, SLOT(showMessage()));
}
So, fürs erste sollte das mal reichen...
MfG, Alci.
Aktuelle Projekte:
FModPlayer: Audio-Player auf Basis von FModEx
Epp.org: C++-IDE mit MinGW-Compiler
Entwickelt wird unter anderem mit Qt 4.1.4