newby c++ & Qt : connect Frage

Alles rund um die Programmierung mit Qt
Antworten
pipapong
Beiträge: 4
Registriert: 9. April 2013 15:47

newby c++ & Qt : connect Frage

Beitrag von pipapong »

hi Leute,

ich beschäftige mich in letzter Zeit sehr mit bin Qt und C++, bin aber noch ein ziemlicher Anfänger.
ich soll ein etwas grösseres Programm schreiben mit dem man statische ( von Statik wie bei Bauingenieur) Nachweise berechnen kann also will ich meine Berechnungen und die Gui gut trennen aber habe einen ziemlich komplizierten weg eingeschlagen.
ich habe hier ein keines Beispiel geschrieben das alles enthält was ich noch nicht versteh ( soweit)...
also zu meiner Frage:
ich hab 3 Klassen:
-myData
-myMessageBox
- MainWindow
die Instanz data der Klasse myData enthält alle Daten, und die klasse myMessageBox soll hier nur repräsentativ für alle klassen stehen die auf einen Slot von irgendeiner anderen klasse reagieren sollen.

MainWindow beinnhaltet eine Instanz der Klasse myMessageBox und eine von myData.
1.) was ich erreichen will ist dass ich in einer Instanz der klasse myMessage auf die Instanz von myData zugreifen kann.
2.) wenn ich das habe kann ich die connects() direkt in die Konstruktoren dieser klassen schreiben was nicht zu so einem chaos in meine MainWindow führt.

ich habe es jetzt so gelöst, dass ich immer ein Signal emite das Mainwindow abfängt und einen slot wieder aufruft aber das scheint mir recht kompliziert weil dies zur folge hat dass ich für eine Reaktion auf etwas der klasse selber ein signal geben muss, der Mein einen slot und noch eine funktion(bzw Eigenschft) welche dann ausgeführt wird.
Das geht sicher auch einfacher.

Bin für jede Hilfe dankbar.
das beispiel ist etwas lang geraten aber wollte ein funktionnierendes Beispiel schreiben

mfg Pongo

Code: Alles auswählen

//myData.h
//---------------------------------------------------
#ifndef MYDATA_H
#define MYDATA_H

#include <QObject>
#include <QString>

class myData : public QObject
{
    Q_OBJECT
public:
    myData(QObject *parent = 0);
public slots:
    void setData(QString*);
    QString* getData() const{return datastring;}
private:
    QString *datastring;
};

#endif // MYDATA_H

//myData.cpp
//---------------------------------------------------
#include "mydata.h"

myData::myData(QObject *parent) :
    QObject(parent)
{
    datastring = new QString;
}
void myData::setData(QString *s)
{
    datastring = s;
}

//    myMessage.h
//---------------------------------------------------
#ifndef MYMESSAGE_H
#define MYMESSAGE_H

#include <QObject>
#include <QMessageBox>
/* i know that this is not the best way to get a messageBox but it was the fastest for me, and the message box iss representive*/
class myMessage : public QObject
{
    Q_OBJECT
public:
    myMessage(QObject *parent = 0);//, QString *str = new QString("default"));
public slots:
    void showMesssage();
    void showMesssage(QString *s);
    void newMeesageText(QString *s);
private:
    QMessageBox *message;
};
#endif // MYMESSAGE_H

//myMessage.cpp
//---------------------------------------------------
#include "mymessage.h"
myMessage::myMessage(QObject *parent):
QObject(parent)
{
    message = new QMessageBox();
    message->setText("i got this Text by the Constructor");
}
void myMessage::showMesssage()
{
    message->show();
}
void myMessage::showMesssage(QString *s)
{
    message->setText(*s);
    message->show();
}
void myMessage::newMeesageText(QString *s)
{
    message->setText(*s);
}

//MainWindow.h
//---------------------------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLineEdit>
#include <QGroupBox>
#include <QHBoxLayout>
#include <mymessage.h>

#include "mydata.h"
class MainWindow : public QMainWindow
{
    Q_OBJECT
public slots:
public:
    MainWindow(QWidget *parent = 0);
private:
    QLineEdit *line;
    myMessage *MBox;
    myData *data;
private slots:
    void theThingIWantToDo();
};

#endif // MAINWINDOW_H

//MainWindow.cpp
//---------------------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    data = new myData(this);

    line = new QLineEdit;
    QHBoxLayout *hlay = new QHBoxLayout;
    hlay->addWidget(line);
    QGroupBox *box = new QGroupBox("Groupox");
    box->setLayout(hlay);
    setCentralWidget(box);
    MBox = new myMessage(this);
    connect(line,SIGNAL(returnPressed()),
            MBox,SLOT(showMesssage()));
    connect(line,SIGNAL(returnPressed()),
            this,SLOT(theThingIWantToDo()));
}
void MainWindow::theThingIWantToDo()// but not from here since this seems to be to complicated
{
    QString *s = new QString;
    *s = line->text();
    MBox->newMeesageText(s);
}

Antworten