Hallo,
kann mir bitte jemand zeigen, wie ich ein Fenster mit einem QPushbutton programmiere - bei Betätigung desgleichen soll ein Text in dem Shellfenster geprinted werden, von dem das Programm gestartet wurde. Irgendwie bin ich nicht fähig so einen slot einzurichten. Danke!
QPushbutton und Textausgabe Bash
ja, das mit printf funktioniert einwandfrei. Nur mein Problem ist momentan, dass der slot mit void button1(); der definiert wurde nicht gefunden wird oder einfach die Ausgabe bei jedem Button wenn der gedrückt wird kommt. Wahrscheinlich falsch definiert. Das Problem liegt also bei meinem Slot. Kannst Du mir bitte ein kleines Beispiel geben wie ich den Slot zu definieren habe? Kann ich die class in das main.cpp schreiben oder muss ich eine .h includen? Besten Dank!
-
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
class Irgendwas
{
Q_OBJECT
public slots:
void button1();
};
Man darf außerdem nicht das Makro Q_OBJECT innerhalb der Klassendeklaration vergessen. Dann darf die Datei allerdings nicht mehr direkt mit dem C++ Compiler bearbeitet werden, sondern muss vorher noch mit MOC (Meta-Object Compiler) die Daten bearbeiten lassen. Wie das dann genau funktioniert, weiß ich nicht, ich lasse deswegen meine Projektdatei immer mit QMAKE automatisch erstellen, damit ich mich um MOC nicht kümmern muss.
{
Q_OBJECT
public slots:
void button1();
};
Man darf außerdem nicht das Makro Q_OBJECT innerhalb der Klassendeklaration vergessen. Dann darf die Datei allerdings nicht mehr direkt mit dem C++ Compiler bearbeitet werden, sondern muss vorher noch mit MOC (Meta-Object Compiler) die Daten bearbeiten lassen. Wie das dann genau funktioniert, weiß ich nicht, ich lasse deswegen meine Projektdatei immer mit QMAKE automatisch erstellen, damit ich mich um MOC nicht kümmern muss.
Hi,
Du solltest die Klassen in eigenen Dateien deklarieren, da sonst der Meta Object Compiler Probleme damit hat. Genaueres weiß ich auch nicht.
Hier ein Beispiel:
/****** main.cpp ********/
#include <qapplication.h>
#include <qpushbutton.h>
#include "MyClass.h"
using namespace std;
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QPushButton *button = new QPushButton("test", 0);
MyClass *myClass = new MyClass();
QObject::connect(button, SIGNAL(clicked()), myclass, SLOT(runSlot()) );
a.setMainWidget( button );
button->show();
return a.exec();
}
/****** main.cpp Ende ********/
/****** MyClass.h ********/
#include <iostream>
#include <qobject.h>
class MyClass : public QObject {
Q_OBJECT
public slots:
void runSlot() {
printf("test\n");
}
};
/****** MyClass.h Ende ********/
Gruß
Mike
Du solltest die Klassen in eigenen Dateien deklarieren, da sonst der Meta Object Compiler Probleme damit hat. Genaueres weiß ich auch nicht.
Hier ein Beispiel:
/****** main.cpp ********/
#include <qapplication.h>
#include <qpushbutton.h>
#include "MyClass.h"
using namespace std;
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QPushButton *button = new QPushButton("test", 0);
MyClass *myClass = new MyClass();
QObject::connect(button, SIGNAL(clicked()), myclass, SLOT(runSlot()) );
a.setMainWidget( button );
button->show();
return a.exec();
}
/****** main.cpp Ende ********/
/****** MyClass.h ********/
#include <iostream>
#include <qobject.h>
class MyClass : public QObject {
Q_OBJECT
public slots:
void runSlot() {
printf("test\n");
}
};
/****** MyClass.h Ende ********/
Gruß
Mike
-
- Beiträge: 27
- Registriert: 12. August 2004 17:57
- Kontaktdaten:
Hi,
jein. qWarning, qDebug und qFatal senden die Meldung unter X11 nach stderr. Unter Windows werden die Meldungen laut Doku an den Debugger geschickt.
Das kannst Du auch gut nachvollziehen, wenn Du z.B. ein Programm mit folgenden Anweisungen hast:
qWarning("Dies ist eine Warnmeldung");
qDebug("Dies ist eine Debugmeldung");
printf("Dies geht an die Standardausgabe\n");
und jetzt das Programm startest mit:
./programmname 2> error.log
Durch das 2> werden die Ausgaben an stderr in die Datei error.log umgeleitet.
D.h. auf der Konsole wirst Du die Meldung "Dies geht an die Standardausgabe" sehen und in der Datei error.log werden die beiden Warn/Debug-Meldungen stehen. Rufst Du das Programm einfach so auf, wirst Du keinen Unterschied merken, da die stderr - Meldungen dann auch an stdout geschickt werden.
Selbigen Effekt erreichst Du auch mit:
fprintf(stderr, "Dies ist eine Warnmeldung\n");
Hiermit wird die Meldung an stderr geleitet, statt stdout.
Gruß
Mike
jein. qWarning, qDebug und qFatal senden die Meldung unter X11 nach stderr. Unter Windows werden die Meldungen laut Doku an den Debugger geschickt.
Das kannst Du auch gut nachvollziehen, wenn Du z.B. ein Programm mit folgenden Anweisungen hast:
qWarning("Dies ist eine Warnmeldung");
qDebug("Dies ist eine Debugmeldung");
printf("Dies geht an die Standardausgabe\n");
und jetzt das Programm startest mit:
./programmname 2> error.log
Durch das 2> werden die Ausgaben an stderr in die Datei error.log umgeleitet.
D.h. auf der Konsole wirst Du die Meldung "Dies geht an die Standardausgabe" sehen und in der Datei error.log werden die beiden Warn/Debug-Meldungen stehen. Rufst Du das Programm einfach so auf, wirst Du keinen Unterschied merken, da die stderr - Meldungen dann auch an stdout geschickt werden.
Selbigen Effekt erreichst Du auch mit:
fprintf(stderr, "Dies ist eine Warnmeldung\n");
Hiermit wird die Meldung an stderr geleitet, statt stdout.
Gruß
Mike