QT Funktionsaufruf, aber wie?

Alles rund um die Programmierung mit Qt
Antworten
GandalfMobil
Beiträge: 2
Registriert: 9. November 2005 08:29

QT Funktionsaufruf, aber wie?

Beitrag 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
m.trix
Beiträge: 49
Registriert: 12. Oktober 2005 09:51
Wohnort: Manhattan

Beitrag 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 =)
klogg
Beiträge: 129
Registriert: 5. September 2005 17:00
Wohnort: Hann. Münden

Re: QT Funktionsaufruf, aber wie?

Beitrag 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
GandalfMobil
Beiträge: 2
Registriert: 9. November 2005 08:29

Beitrag 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
jimmy
Beiträge: 24
Registriert: 10. August 2005 11:39

Beitrag 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.
Antworten