Seite 1 von 1

QT Funktionsaufruf, aber wie?

Verfasst: 9. November 2005 08:38
von GandalfMobil
Hallo Leute,

vorweg: ich bin eigentlich totaler Anfänger was QT und C++ angeht. Aber trotzdem habe ich folgendes hinbekommen:

QT 4.0.1 und MacOSx habe ich. Mit dem Designer habe ich eine einfache GUI erstellt, in der eine Eingabezeile oben ist, in der Mitte ein Button und unten eine 2. Eingabezeile, die aber geschützt ist.

Nun möchte ich eigentlich nur folgendes machen. Wenn man auf den Button drückt, soll er zu der Zahl oben 10 hinzufügen. Dieses möchte ich aber gerne über eine Funktion machen. Mit ist nämlich nicht ganz klar geworden bis jetzt, was diese Slots genau zu sagen haben. Kann man den Slots auch sagen, dass sie eine Funktion aufrufen sollen und einen Wert aus einem Textfeld einlesen und mit übergeben ?

Theoretisch sollte das ja einfach sein, aber ich habe keine idee zum Syntax. Ich schicke euch auch erstmal meine main.cpp und meine aufgabe01.h

Code: Alles auswählen

#ifndef AUFGABE01_H
#define AUFGABE01_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QFrame>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QFrame *line;
    QLineEdit *eingab;
    QLabel *text;
    QPushButton *button;
    QLineEdit *ziel;

        // From here

        int calculate(int zahl)
        {
                zahl += zahl;
                return zahl;


        }

        // till here

    void setupUi(QMainWindow *MainWindow)
    {
    MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
    MainWindow->resize(QSize(513, 285).expandedTo(MainWindow->minimumSizeHint()));
    centralWidget = new QWidget(MainWindow);
    centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
    line = new QFrame(centralWidget);
    line->setObjectName(QString::fromUtf8("line"));
    line->setGeometry(QRect(10, 60, 441, 16));
    line->setFrameShape(QFrame::HLine);
    eingab = new QLineEdit(centralWidget);
    eingab->setObjectName(QString::fromUtf8("eingab"));
    eingab->setGeometry(QRect(90, 20, 301, 21));
    text = new QLabel(centralWidget);
    text->setObjectName(QString::fromUtf8("text"));
    text->setGeometry(QRect(20, 20, 61, 16));
    button = new QPushButton(centralWidget);
    button->setObjectName(QString::fromUtf8("button"));
    button->setGeometry(QRect(140, 80, 171, 32));
    ziel = new QLineEdit(centralWidget);
    ziel->setObjectName(QString::fromUtf8("ziel"));
    ziel->setGeometry(QRect(160, 120, 138, 22));
    ziel->setReadOnly(true);
    MainWindow->setCentralWidget(centralWidget);
    retranslateUi(MainWindow);


    QObject::connect(button, SIGNAL(clicked()), eingab, SLOT(selectAll()));

    QMetaObject::connectSlotsByName(MainWindow);
    } // setupUi

    void retranslateUi(QMainWindow *MainWindow)
    {
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
    text->setText(QApplication::translate("MainWindow", "Eingabe", 0, QApplication::UnicodeUTF8));
    button->setText(QApplication::translate("MainWindow", "Kopieren & Einf\303\274gen", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(MainWindow);
    } // retranslateUi

};

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui

#endif // AUFGABE01_H
und nun noch die main.cpp

Code: Alles auswählen

#include <QApplication>
#include <QMainWindow>

#include "aufgabe01.h"

class MainWindow : public QMainWindow
{
   Q_OBJECT
   public:
      MainWindow( QWidget *parent = 0 );

   private:
      Ui::MainWindow _ui;
};

MainWindow::MainWindow( QWidget *parent )
   : QMainWindow( parent )
{
   _ui.setupUi( this );
}

int main( int argc, char **argv )
{
    QApplication app( argc, argv );
    MainWindow mw;
    mw.show();
    return app.exec();
}

#include "main.moc"
Meine 2. Frage ist, aber das würde erst danach kommen, hat jemand einen Link zu einem Tutorial oder so, in dem erklärt wird, wie man diese Standartfenster für Datei öffnen, Datein speichern unter, Drucken etc. erstellt ?

Denn meine Aufgabe ist es, eine ASCII DAT Datei mit der GUI zu öffnen und an eine parserFunction zu geben. Aber wie gesagt, ich möchte es erstmal hinbekommen, dass wenn ein Button gedrückt wird, eine Funktion aufgerufen werden soll.

Ich danke euch schon mal,

Mfg,
Hauke

Verfasst: 9. November 2005 10:08
von m.trix
http://doc.trolltech.com/ - Da findest du die komplette Docu zu deinem Qt.
http://doc.trolltech.com/4.0/qfiledialog.html - Da findest du alles über die Dialoge die du brauchst.
http://doc.trolltech.com/4.0/signalsandslots.html - Das ist sehr hilfreich für Signals/Slots.

Leider bin ich grad kurz angebunden, liefere aber den code nach. Oder vielleicht ist ja jemand schneller =)

Re: QT Funktionsaufruf, aber wie?

Verfasst: 9. November 2005 13:11
von klogg
GandalfMobil hat geschrieben: Nun möchte ich eigentlich nur folgendes machen. Wenn man auf den Button drückt, soll er zu der Zahl oben 10 hinzufügen. Dieses möchte ich aber gerne über eine Funktion machen. Mit ist nämlich nicht ganz klar geworden bis jetzt, was diese Slots genau zu sagen haben. Kann man den Slots auch sagen, dass sie eine Funktion aufrufen sollen und einen Wert aus einem Textfeld einlesen und mit übergeben ?
Ein Slot IST eine ganz normale Funktion.
Der einzige Unterschied zu nicht-Slots ist nur, dass du sie über ein Signal starten kannst.
Kannst sie natürlich (wie andere Funktionen) auch von Hand aufrufen.

Guckst du auch hier: http://doc.trolltech.com/4.0/signalsandslots.html

HENNING

Verfasst: 10. November 2005 13:16
von GandalfMobil
Hallo,

danke schonmal, habe mir das auch durchgelesen, aber so richtig funktionieren tut es noch nicht. sind bestimmt auch nur ein paar zeilen die hinzugefügt werden müssen, aber leider schaffe ich es zur Zeit noch nicht. Wenn jemand die Zeit hat, würde ich mich über einen Code-Schnipsel sehr freuen.

Mfg,
Hauke

Verfasst: 10. November 2005 14:36
von jimmy
Na ja theoretisch geht es so:
connect(GandalfButton,SIGNAL(clicked()),this,SLOT(GandalfFunktion()));
Wenn du dann auf den Button klickst, wird die Funktion aufgerufen.
Deine Funktion "calculate" würde ich umschreiben.
void deineKlasse::GandalfFunktion()
{
QVariant blub = eingabe->text().toInt()+10; // int kann man net toString umwandeln, deswegen QVariant
eingabe->setText(blub.toString());
}
So wird immer der Text immer um10 erhöht. Falls du da ein Zahlestring schreibst.