Eigener SLOT funktioniert nicht
Eigener SLOT funktioniert nicht
Hallo,
die Frage ist vielleicht blöd aber ich mache erst seit gestern Qt.
Ich habe mir einen Button, TextEdit und eigenen SLOT gemacht
test.h
...
QTextEdit qtextedit;
private slots:
void Qttest::b_save_click()
{
qtextedit.setText("hallo");
}
...
test.cpp
QPushButton *b_save=new QPushButton("save",this);
qtextedit.setParent(this);
connect(b_save, SIGNAL(clicked()), this, SLOT(b_save_click()));
...
Aber wenn ich auf den Button klicke erscheint der Text nicht im Textfenster. Ich habe keine Ahnung was da nicht funktioniert. Hoffe ihrkönnt mir helfen.
die Frage ist vielleicht blöd aber ich mache erst seit gestern Qt.
Ich habe mir einen Button, TextEdit und eigenen SLOT gemacht
test.h
...
QTextEdit qtextedit;
private slots:
void Qttest::b_save_click()
{
qtextedit.setText("hallo");
}
...
test.cpp
QPushButton *b_save=new QPushButton("save",this);
qtextedit.setParent(this);
connect(b_save, SIGNAL(clicked()), this, SLOT(b_save_click()));
...
Aber wenn ich auf den Button klicke erscheint der Text nicht im Textfenster. Ich habe keine Ahnung was da nicht funktioniert. Hoffe ihrkönnt mir helfen.
Hallo,
so ganz verstehe ich deinen Quelltext nicht. Was macht das " Qttest::" im Header? Das er das überhaupt kompiliert. Auch ansonsten ist mir nicht alles klar. Vielleicht postest du besser nochmal den kompletten Quellcode. Und am Besten im "Code-Tag", denn dann kann man ihn besser lesen. Dann klappt das auch besser mit der Fehlersuche
HeikoB[/code]
so ganz verstehe ich deinen Quelltext nicht. Was macht das " Qttest::" im Header? Das er das überhaupt kompiliert. Auch ansonsten ist mir nicht alles klar. Vielleicht postest du besser nochmal den kompletten Quellcode. Und am Besten im "Code-Tag", denn dann kann man ihn besser lesen. Dann klappt das auch besser mit der Fehlersuche
HeikoB[/code]
gut war etwas unklar
qttest.h
qttest.cpp
[/code]
qttest.h
Code: Alles auswählen
#include <QTextEdit>
#include <QPushButton>
#include <QApplication>
#include <QWidget>
class Qttest: public QWidget
{
private:
QTextEdit qtextedit;
public:
Qttest(QWidget *parent=0);
virtual ~Qttest();
private slots:
void b_save_click();
};
Code: Alles auswählen
#include "qttest.h"
Qttest::Qttest()
{
qtextedit.setParent(this);
QPushButton *b_save= new QPushButton("save",this);
connect(b_save,SIGNAL(clicked()), this, SLOT(b_save_click()));
}
Qttest::~Qttest()
{}
void Qttest::b_save_click()
{
qtextedit.setText("hallo");
}
Servus,
was passierst, wen du aus deinem "private slot" ein "public slot" machst? Ich muss gestehen, ich glaube ich habe noch nie einen private Slot genutzt, da ich sowas dann in der Regel über Funktionsaufrufe nutze. Daher kann ich jetzt nicht mit absoluter Sicherheit sagen kann, ob es daran liegt. Allerdings fällt mir im Moment nichts weiteres ein, woran dein Problem liegen könnte.
was passierst, wen du aus deinem "private slot" ein "public slot" machst? Ich muss gestehen, ich glaube ich habe noch nie einen private Slot genutzt, da ich sowas dann in der Regel über Funktionsaufrufe nutze. Daher kann ich jetzt nicht mit absoluter Sicherheit sagen kann, ob es daran liegt. Allerdings fällt mir im Moment nichts weiteres ein, woran dein Problem liegen könnte.
Du hast vergessen das Q_OBJECT Macro anzugeben. Dies musst du immer machen, wenn du mit Signals und Slots arbeitest.
Code: Alles auswählen
class Qttest: public QWidget
{
Q_OBJECT;
private:
QTextEdit qtextedit;
public:
Qttest(QWidget *parent=0);
virtual ~Qttest();
private slots:
void b_save_click();
}; Sorry, Fehler von mir, änder mal
in
dann müsste es besser funktionieren
Gruß
HeikoB
Code: Alles auswählen
class Qttest: public QWidget
{
private:
...
Code: Alles auswählen
class Qttest: public QWidget
{
Q_OBJECT
private:
...
Gruß
HeikoB
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Wenn ich das Q_OBJECT rein schreibe krieg ich Linker Errors 
Ich benutze Devc++ und free QT unter Windows.
Kleine Frage, wie funktioniert den connect(). Es muss ja irgend wie auf der Message Arhetiktur von der WinApi aufbauen aber wie ist es programmiertechnich gemacht. Öffnet es einen thread in dem PickMessage() drin steht oder modifiziert es generisch den WindowsProducer.
Ich benutze Devc++ und free QT unter Windows.
Kleine Frage, wie funktioniert den connect(). Es muss ja irgend wie auf der Message Arhetiktur von der WinApi aufbauen aber wie ist es programmiertechnich gemacht. Öffnet es einen thread in dem PickMessage() drin steht oder modifiziert es generisch den WindowsProducer.
dann "moc"st du das file nicht. moc ist der "meta-object-compiler" der die notwendigen Meta-Informationen die für signal-slot gebraucht werden erzeugt.
http://doc.trolltech.com/4.3/moc.html#moc
http://doc.trolltech.com/4.3/moc.html#moc
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: