Alles rund um die Programmierung mit Qt
joergb23
Beiträge: 11 Registriert: 30. April 2006 10:19
Wohnort: Leipzig
Kontaktdaten:
Beitrag
von joergb23 » 29. August 2006 16:43
Hallo,
ich möchte mit folgendem Code ein QLabel aktualisieren, doch leider ändert sich nichts an dem Inhalt. Habe ich irgendwo einen Denkfehler?
Systeme: W2k und Debian, jeweils Qt 4.1.4
Code: Alles auswählen
#include <QtGui>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QWidget *window = new QWidget;
QLabel *l = new QLabel("Hallo");
QPushButton *button0 = new QPushButton("Label aktualisieren");
QPushButton *button1 = new QPushButton("Beenden");
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(l);
layout->addWidget(button0);
layout->addWidget(button1);
window->setLayout(layout);
window->show();
QObject::connect(button0, SIGNAL(clicked()),
l, SLOT(setText("Anders als vorher")));
QObject::connect(button1, SIGNAL(clicked()),
&app, SLOT(quit()));
return app.exec();
}
Danke,
Joerg
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 29. August 2006 17:40
man kann im connect nichts übergeben.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24 Registriert: 23. August 2006 23:28
Beitrag
von reani » 29. August 2006 18:32
soweit ich weiß, muss der Slot so ausschaun:
QObject::connect(button0, SIGNAL(clicked()), l, SLOT(setText(const QString&)));
setText(const QString &) ist ein public Slot in der QLabel-Klasse
caligano
Beiträge: 126 Registriert: 19. August 2006 15:33
Beitrag
von caligano » 29. August 2006 18:49
Christian81 hat geschrieben: man kann im connect nichts übergeben.
kann man das eigentlich auch anders lösen als eine Klasse zu schreiben?
ich habs mal so gemacht:
main.cpp
Code: Alles auswählen
#include <QApplication>
#include "settext.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
demoKlasse demo;
return demo.exec();
}
settext.h
Code: Alles auswählen
#ifndef SETTEXT_H
#define SETTEXT_H
#include <QDialog>
class QDialogButtonBox;
class QLabel;
class QPushButton;
class demoKlasse : public QDialog
{
Q_OBJECT
public:
demoKlasse(QWidget *parent = 0);
private:
QLabel *label;
QPushButton *button0;
QPushButton *button1;
QDialogButtonBox *buttonBox;
private slots:
void setText();
};
#endif
settext.cpp
Code: Alles auswählen
#include <QtGui>
#include "settext.h"
demoKlasse::demoKlasse(QWidget *parent): QDialog(parent)
{
label = new QLabel("alter Text");
button0 = new QPushButton ("Label aktualisieren");
button1 = new QPushButton ("Beenden");
buttonBox = new QDialogButtonBox;
buttonBox->addButton(button0, QDialogButtonBox::ActionRole);
buttonBox->addButton(button1, QDialogButtonBox::RejectRole);
connect(button0, SIGNAL(clicked()), this, SLOT(setText()));
connect(button1, SIGNAL(clicked()), this, SLOT(close()));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(label);
layout->addWidget(button0);
layout->addWidget(button1);
setLayout(layout);
}
void demoKlasse::setText()
{
label->setText("neuer Text");
}
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 29. August 2006 18:55
caligano hat geschrieben: Christian81 hat geschrieben: man kann im connect nichts übergeben.
kann man das eigentlich auch anders lösen als eine Klasse zu schreiben?
Nein, soweit ich weiss nicht. Aber da Du die Elemente eh in einem Mainwindow erstellst, sollte das nicht ein so grosser Nachteil sein.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
caligano
Beiträge: 126 Registriert: 19. August 2006 15:33
Beitrag
von caligano » 29. August 2006 18:57
nein nein, natürlich kein Nachteil, ich habs ja auch nur mal schnell versucht, um für Joerg eine Lösung zu finden. Aber interessant wär's schon, ob man das Problem auch in weniger Zeilen lösen kann ...
joergb23
Beiträge: 11 Registriert: 30. April 2006 10:19
Wohnort: Leipzig
Kontaktdaten:
Beitrag
von joergb23 » 29. August 2006 19:10
cool, danke
Ist die QDialogButtonBox neu in 4.2?
caligano
Beiträge: 126 Registriert: 19. August 2006 15:33
Beitrag
von caligano » 29. August 2006 19:33
joergb23 hat geschrieben: Ist die QDialogButtonBox neu in 4.2?
jo, sorry wenn du's jetzt nicht kompilieren konntest
http://doc.trolltech.com/4.2/qdialogbuttonbox.html
The QDialogButtonBox class is a widget that presents buttons in a layout that is appropriate to the current widget style. (...)
This class was introduced in Qt 4.2.
joergb23
Beiträge: 11 Registriert: 30. April 2006 10:19
Wohnort: Leipzig
Kontaktdaten:
Beitrag
von joergb23 » 29. August 2006 19:38
das war dann kein problem, dies zu erkennen.
Danke,Du hast mir sehr geholfen.
caligano
Beiträge: 126 Registriert: 19. August 2006 15:33
Beitrag
von caligano » 29. August 2006 19:40
joergb23 hat geschrieben: Danke,Du hast mir sehr geholfen.
kein Problem, und schon hat das QtWiki wieder nen neuen Eintrag (wenn ichs dann mal einfüge)