Seite 1 von 1

[gelöst] QLabel aktualisieren

Verfasst: 29. August 2006 16:43
von joergb23
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

Verfasst: 29. August 2006 17:40
von Christian81
man kann im connect nichts übergeben.

Verfasst: 29. August 2006 18:32
von reani
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

Verfasst: 29. August 2006 18:49
von caligano
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");
}   

Verfasst: 29. August 2006 18:55
von Christian81
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.

Verfasst: 29. August 2006 18:57
von caligano
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 ...

Verfasst: 29. August 2006 19:10
von joergb23
cool, danke :)
Ist die QDialogButtonBox neu in 4.2?

Verfasst: 29. August 2006 19:33
von caligano
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.

Verfasst: 29. August 2006 19:38
von joergb23
das war dann kein problem, dies zu erkennen. :)
Danke,Du hast mir sehr geholfen.

Verfasst: 29. August 2006 19:40
von caligano
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)