Qt5.10 PushButton-Text aus QVector of QStrings



  • Folgendes,
    ich versuche für ein kleines Programm mit 5 PushButtons den Text an den Buttons jeweils über eine Datei einzulesen. Dafür habe ich einen fstream der die Namen in einen stdstring einliest und anschließend in einen QVector kopiert, dieser nimmt QStrings als Datentyp. Jetzt habe ich das Problem, dass wenn ich nun versuche den entsprechenden Vektorwert an setText() zu übergeben, das Programm beim Versuch es zu starten abstürzt. Der Fehler muss irgendwie bei der Übergabe sein, da ich durch gezieltes auskommentieren erfahren konnte, dass es nur dann abstürzt wenn die Übergabe vorhanden ist.

    Code: Main.cpp

    #include "gamelauncher.h"
    #include <QApplication>
    #include "includes.h"
    
    int main(int argc, char *argv[])
    {
    using namespace std;
    int i;
    string tmpstr;
    QApplication a(argc, argv);
    gamelauncher w;
    fstream conf ("bnames.cfg", ios::in);
    for (i=0; i<5; i++) {
        getline(conf, tmpstr);
       w.gamevector.push_back(QString::fromStdString(tmpstr));
    }
    w.setWindowTitle("titel");
    w.show();
    
    return a.exec();
    

    }

    Code: gamelauncher.cpp

    #include "gamelauncher.h"
    #include "ui_gamelauncher.h"
    #include "includes.h"
    
    gamelauncher::gamelauncher(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::gamelauncher)
    {
        ui->setupUi(this);
        ui->gam1b->setText(gamevector.at(0); //gamXb = buttons Fehler hier???
        ui->gam2b->setText(gamevector.at(1)); //gamevector[zahl] geht auch nicht
        ui->gam3b->setText(gamevector.at(2));
        ui->gam4b->setText(gamevector.at(3));
        ui->gam5b->setText(gamevector.at(4));
        connect(ui->quitbutton, SIGNAL(clicked()), this, SLOT(close()));
    }
    
    gamelauncher::~gamelauncher()
    {
        delete ui;
    }
    

    Headerdateien:

    #ifndef INCLUDES_H
    #define INCLUDES_H
    
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <string>
    #include <fstream>
    #include <ios>
    
    /*namespace a { std::vector<std::string> strvec;// } */
    
    #endif // INCLUDES_H
    

    header 2:

    #ifndef GAMELAUNCHER_H
    #define GAMELAUNCHER_H
    
    #include <QMainWindow>
    #include <QVector>
    
    
    namespace Ui {
    class gamelauncher;
    }
    
    class gamelauncher : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit gamelauncher(QWidget *parent = 0);
        QVector<QString> gamevector;
    
        ~gamelauncher();
    
    
    private:
        Ui::gamelauncher *ui;
    
    
    };
    
    #endif // GAMELAUNCHER_H
    

    Ich wäre für Hilfe wirklich dankbar 😃



  • Die Reihenfolge in der main-Funktion ist falsch.
    Zuerst erzeugst du den gamelauncher (dessen Konstruktor aufgerufen wird), und dann erst liest du die Datei ein und füllst den gamevector.

    Übergebe z.B. den gamevector als Parameter an den Konstruktor.



  • @th69 Wie kann ich den Konstruktor dann mit Parameter aufrufen?



  • Sorry, aber wenn du die Grundlagen von C++ noch nicht beherrschst, dann solltest du noch nicht mit Qt arbeiten.

    Und im Internet solltest du auch fündig werden, z.B. Konstruktorparameter, Initialisiererliste und Klassenkonstanten.