Kommunikation zwischen zwei Klassen



  • Hallo zusammen,

    ich hab ein Problem zwischen zwei Klassen.

    Die Klasse MainWindow soll per Klick zufällige Zahlen erstellen und diese dann unter anderem anschließend als eine Zeichenkette an eine String(stringForm) initialisieren.

    Die stringForm ist als public in MainWindow vereinbart.

    Nach einem weiteren Klick soll dann eine neue Instanz der Klasse Form erstellt werden und die stringForm soll dort in der ui->lineEdit_2->setText(); angezeigt werden, doch leider funktioniert das nicht. Ich komm nicht drauf warum! bitte um Hilfe oder zumindest Hilfestellung. Vielen Dank

    Hier mal die beiden Klassen

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        QString stringForm;
    
    private slots:
        void on_actionClose_triggered();
        void on_closeButton_clicked();
    
    public slots:
        void on_startButton_clicked();
        void on_saveButton_clicked();
    
    private:
        Ui::MainWindow *ui;
        void bildVerbindung();
        bool dbVerbindung();
        bool dbConnect;
    };
    
    #endif // MAINWINDOW_H
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QtSql>
    #include <QMessageBox>
    #include <random>
    #include <algorithm>
    #include "form.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setFixedSize(300,365);
    
        bildVerbindung();
        dbVerbindung();
    
        QFont font("Times",23, QFont::Bold,true);
        ui->lineEdit->setFont(font);
        ui->lineEdit->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_2->setFont(font);
        ui->lineEdit_2->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_3->setFont(font);
        ui->lineEdit_3->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_4->setFont(font);
        ui->lineEdit_4->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_5->setFont(font);
        ui->lineEdit_5->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_6->setFont(font);
        ui->lineEdit_6->setAlignment(Qt::AlignCenter);
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_actionClose_triggered()
    {
        this->close();
    }
    
    void MainWindow::on_closeButton_clicked()
    {
        this->close();
    }
    
    void MainWindow::bildVerbindung()
    {
        QPixmap myPix;
        myPix.load("D:/Eigene Dateien/Desktop/lotto.jpg");
    
        myPix = myPix.scaledToHeight(150);
        ui->label->setPixmap(myPix);
        ui->label->resize(myPix.size());
    }
    
    bool MainWindow::dbVerbindung()
    {
        dbConnect = true;
    
        QSqlDatabase myBase = QSqlDatabase::addDatabase("QSQLITE");
        myBase.setDatabaseName("D:/Eigene Dateien/Desktop/SQLite/lottodb.db");
    
        if(!(myBase.open() == true))
        {
            QMessageBox::critical(this, "Error","No connection wiht database!");
            return dbConnect = false;
    
        }
        return dbConnect;
    }
    
    void MainWindow::on_startButton_clicked()
    {
        QSet<QString>mySetList;
        int loop = 0;
    
        while(loop <= 6)
        {
            std::random_device rd;
            std::mt19937 mt(rd());
            std::uniform_real_distribution<double> dist(1,49);
            int nummer = dist(mt);
    
            QString stringNummer = QString::number(nummer);
    
            mySetList.insert(stringNummer);
            loop++;
        }
    
        QList<QString>myListList=mySetList.toList();
        std::sort(myListList.begin(),myListList.end());
    
        ui->lineEdit->setText(myListList.at(0));
        ui->lineEdit_2->setText(myListList.at(1));
        ui->lineEdit_3->setText(myListList.at(2));
        ui->lineEdit_4->setText(myListList.at(3));
        ui->lineEdit_5->setText(myListList.at(4));
        ui->lineEdit_6->setText(myListList.at(5));
    
        //diesen string kann ich nicht in Form benutzen,
        stringForm = myListList.at(0)+", "+myListList.at(1)+",    "+myListList.at(2)+", "+myListList.at(3)+", "+myListList.at(4)+", "+myListList.at(5);
    
        mySetList.clear();
        myListList.clear();
    }
    
    void MainWindow::on_saveButton_clicked()
    {
        if(dbConnect == true)
        {
            Form *newForm = new Form();
            newForm->show();
        }
    }
    
    #ifndef FORM_H
    #define FORM_H
    
    #include <QWidget>
    #include <QtSql>
    #include "mainwindow.h"
    
    namespace Ui {
    class Form;
    }
    
    class Form : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Form(QWidget *parent = 0);
        ~Form();
        void showInfo();
    
    private slots:
        void on_closeButton_clicked();
    
    public slots:
        void on_saveButton_clicked();
    
    private:
        Ui::Form *ui;
        QSqlTableModel *myModel;
    };
    
    #endif // FORM_H
    
    #include "form.h"
    #include "ui_form.h"
    #include "mainwindow.h"
    #include <QDate>
    
    Form::Form(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Form)
    {
        ui->setupUi(this);
        setWindowModality(Qt::ApplicationModal);
    
        QFont font("Times",15, QFont::Bold,true);
    
        ui->lineEdit->setFont(font);
        ui->lineEdit->setAlignment(Qt::AlignCenter);
    
        ui->lineEdit_2->setFont(font);
        ui->lineEdit_2->setAlignment(Qt::AlignCenter);
        showInfo();
    
    }
    
    Form::~Form()
    {
        delete ui;   
    }
    
    void Form::on_closeButton_clicked()
    {
        this->close();
    }
    
    void Form::on_saveButton_clicked()
    {
    
    }
    
    void Form::showInfo()
    {
        QString datum = QDate::currentDate().toString();
        MainWindow zeiger;
    
        ui->lineEdit->setText(datum);
        ui->lineEdit_2->setText(zeiger.stringForm);
    }
    


  • Hallo,

    Spendiere deiner Form-Klasse eine Funktion setString so ähnlich wie.

    void Form::setString(QString string)
    {
        ui->lineEdit_2->setText(string);
    }
    

    und rufe die bei Bedarf auf.
    Du scheinst noch Verständnisprobleme mit Klassen im Allgemeinen zu haben. Bist du sicher, dass da ein Qt-GUI Projekt schon das Richtige für dich ist?


Anmelden zum Antworten