Seite 1 von 1

Anfängerproblem mit LineEdit

Verfasst: 25. November 2007 01:42
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

Verfasst: 25. November 2007 09:02
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));
  }
}

RE:

Verfasst: 25. November 2007 13:37
von Fatal1ty
Ok, nur mein Problem ist jetzt, wie rufe ich diese Funktion per connect auf?

Verfasst: 25. November 2007 14:18
von dhcase

RE:

Verfasst: 25. November 2007 15:40
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.

RE:

Verfasst: 25. November 2007 22:05
von Fatal1ty
Bitteeee erklär mir das einer, es ist sehr wichtig!

Verfasst: 25. November 2007 22:19
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.

Verfasst: 26. November 2007 13:12
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.