Anfängerproblem mit LineEdit

Alles rund um die Programmierung mit Qt
Antworten
Fatal1ty
Beiträge: 4
Registriert: 25. November 2007 01:32

Anfängerproblem mit LineEdit

Beitrag von Fatal1ty »

Hi,

Ich bin neu in Sachen QT, deshalb hab ich auch noch so meine Probleme...

Das Grundsätzliche Prinzip der Connections, also Signals und Slots habe ich verstanden, nur habe ich folgendes Problem.

Ich habe mehrere LineEdit's und möchte dass sobald ich auf den Button 'Errechnen' klicke eine Funktion gestartet wird, meinetwegen die Funktion 'Rechne()'.

In der Funktion werden dann die Werte aller Textfelder ausgelesen und in Variablen gespeichert, dann wird gerechnet und das Ergebnis wieder in die entsprechenden LineEdit's eingefügt.

Noch komfortabler wäre es für mich wenn die Daten der LineEdits immer in Variablen gespeichert sind und ich mit diesen Rechnen kann, und dann die Ergebnisse per setText wieder einsetzen kann. (Also Wie in einer Schleife)

Geht so etwas und wenn ja, wie?

Hoffe ihr könnt mein Problem nachvollziehen, da ich schon eine Weile dran sitze.

Mfg

Fatal1ty
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

void Rechne() {
  bool ok=false;
  bool allOk=true;
  double value1;
  double value2;

  value1=textedit1->text().toDouble(&ok);
  allOk=allOk && oK;

  value2=textedit2->text().toDouble(&ok);
  allOk=allOk && oK;

  if (allOk) {
    value1*=3;
    value2*=4;

    textedit1->setText(QString::number(value1));
    textedit2->setText(QString::number(value2));
  }
}
Fatal1ty
Beiträge: 4
Registriert: 25. November 2007 01:32

RE:

Beitrag von Fatal1ty »

Ok, nur mein Problem ist jetzt, wie rufe ich diese Funktion per connect auf?
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Fatal1ty
Beiträge: 4
Registriert: 25. November 2007 01:32

RE:

Beitrag von Fatal1ty »

Ok ich glaube da hab ich irgendwas noch nicht richtig verstanden... Ich hab mir das mal alles durchgelesen und umprogrammiert, habe zurzeit nur das Problem das er da:

Code: Alles auswählen

Label->setPixmap(QPixmap::fromImage(picture));
Hinter Picture noch ein Qt::ImageConversionFlags haben will, was soll ich da angeben, habs schon mit vielem probiert, und merkwürdig finde ich auch dass es in der main funktion kein Qt::ImageConversionFlags mehr haben will und ihm nur das QImage reicht...


So, ich habe jetzt mal probiert es einzubauen, hier mal die Headerdatei:

Code: Alles auswählen

#ifndef MAIN_H
#define MAIN_H

#include <QWidget>

class Gui : public QWidget
{
    Q_OBJECT

public:
    Gui(QWidget *parent = 0);

public slots:

    void fangAn();

};


#endif
Und die .Cpp

Code: Alles auswählen

#include <QApplication>
#include <QFont>
#include <QPushButton>
#include <QWidget>
#include <QGraphicsScene>
#include <QLabel>
#include <QPicture>
#include <QLineEdit>
#include <QPainter>
#include <QCleanlooksStyle>
#include <iostream>

#include "main.h"

QLineEdit *Glaslaenge = 0;
QLineEdit *Neigung = 0;
QLineEdit *UKRinne = 0;
QLineEdit *UKTraeger = 0;
QLineEdit *UKWandanschluss = 0;
QLineEdit *OKWandanschluss = 0;
QLineEdit *HKStuetze = 0;
QLineEdit *VKStuetze = 0;
QLineEdit *VKRinne = 0;
QPushButton *quit = 0;

Gui::Gui(QWidget *parent) : QWidget(parent)
{
    setFixedSize(542, 718);


    QApplication::setStyle(new QCleanlooksStyle);
/*
    QLabel *Label=new QLabel(this);
         QImage *picture = new QImage;
         picture->load("KaltdachSkizze.png");           // load picture
         QPainter *painter = new QPainter;
         painter->begin(this);              // paint in myWidget
         painter->end();

    Label->setPixmap(QPixmap::fromImage(picture));
*/

    Glaslaenge = new QLineEdit(this);
    Glaslaenge->setGeometry(142,36,61,22);
    Neigung = new QLineEdit(this);
    Neigung->setGeometry(146,117,61,22);
    UKRinne = new QLineEdit(this);
    UKRinne->setGeometry(33,433,61,22);//    <-+120
    UKTraeger = new QLineEdit(this);//         |
    UKTraeger->setGeometry(264,433,61,22); //|
    UKWandanschluss = new QLineEdit(this);
    UKWandanschluss->setGeometry(383,433,61,23);
    OKWandanschluss = new QLineEdit(this);
    OKWandanschluss->setGeometry(470,433,61,22);

    HKStuetze = new QLineEdit(this);
    HKStuetze->setGeometry(290,595,61,23);
    VKStuetze = new QLineEdit(this);
    VKStuetze->setGeometry(290,633,61,23);
    VKRinne = new QLineEdit(this);
    VKRinne->setGeometry(290,683,61,22);

    quit = new QPushButton("Beenden", this);
    quit->resize(75, 30);
    quit->setGeometry(10,10,100,30);
    quit->setFont(QFont("Verdana", 12, QFont::Normal));
    quit->show();
    QObject::connect(quit, SIGNAL(clicked()), this, SLOT(fangAn()));
}



void Gui::fangAn()
{
    std::cout<<"Hallo\n";
}



int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Gui widget;
    widget.show();
    return app.exec();
}
So ich kriege folgende Fehlermeldung
  • undefined reference to `vtable for Gui'
Ich habe danach hier im Forum gesucht, da haben viele etwas von QObject gesagt, aber die ist ja drin wenn ich das richtig verstehe.

Kann mir das mal einer erklären? Ich verzweifel bald.
Fatal1ty
Beiträge: 4
Registriert: 25. November 2007 01:32

RE:

Beitrag von Fatal1ty »

Bitteeee erklär mir das einer, es ist sehr wichtig!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Bitteeee erklär mir das einer, es ist sehr wichtig!
Für uns nicht...

Warum legst du deine Widgets als globale Variablen an?
Warum verwendest du keine Layouts?
qmake aufgerufen?
C++-Grundlagen scheinen auch zu fehlen.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Code: Alles auswählen

Noch komfortabler wäre es für mich wenn die Daten der LineEdits immer in Variablen gespeichert sind und ich mit diesen Rechnen kann, und dann die Ergebnisse per setText wieder einsetzen kann. (Also Wie in einer Schleife) 
die daten sind doch immer in einer variable? schließlich besteht die klasse aus zig fkt. die unterschiedl. rückgabewerte liefern. ich versteh dein problem nicht...

außerdem wäre das ne kuriose schleife!

und außerdem sieht dein code ziemlich schräg aus. sowas habe ich mit 9 jahren gemacht.
Antworten