Struktury i klasy w QT

0

Witam wszystkich serdecznie.

Ostatnio napisałem quiz w QT, ale gdy chciałem go troszkę ulepszyć napotkałem dość poważny problem, z którym nie potrafię sobie sam poradzić. Oto kod :

MAINWINDOW.H

 
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QString>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_pushButton_next_clicked();

private:
    Ui::MainWindow *ui;

    int nr_pytania=1;
    void wczytaj_pytania();
};

struct Pytania
{
public:
    QString pytanie;
    QString odpowiedz[4];
};

#endif // MAINWINDOW_H

MAIN.CPP

 
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

MAINWINDOW.CPP

 
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Pytania question[4];
    wczytaj_pytania();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_next_clicked()
{
    QString x = QString::number(nr_pytania);
    ui->label_nr_pyt->setText(x);
    ui->tresc_pytania->setText(question[0].pytanie);       //  <--- question was not declared in that scope
}

void MainWindow::wczytaj_pytania()
{
    QFile plik("pytania.txt");
    if(!plik.open(QIODevice::ReadOnly))
    {
        QMessageBox::information(this,tr("Informacja"),tr("Nie znaleziono pliku z pytaniami."));
    }
    else
    {
        QString linia;
            for(int i=0; i<4; i++)
            {
                linia=plik.readLine();
                question[i].pytanie=linia;       //  <--- question was not declared in that scope
                linia=plik.readLine();
                question[i].odpowiedz[0]=linia;
                linia=plik.readLine();
                question[i].odpowiedz[1]=linia;
                linia=plik.readLine();
                question[i].odpowiedz[2]=linia;
                linia=plik.readLine();
                question[i].odpowiedz[3]=linia;
            }
    }
    plik.close();
}

Problem polega na tym, że obiekt question jest niewidoczny dla funkcji

 void MainWindow::on_pushButton_next_clicked()

jak i void MainWindow::wczytaj_pytania()

.
Próbowałem zmieniać private na public, ze struktury na klasę nawet zagnieżdżoną, ale bez skutku. Cały czas obiekt pozostaje niewidoczny w funkcjach, w których chcę go użyć. Nie mam zielonego pojęcia gdzie leży błąd i prosiłbym o pomoc.

Dziękuję z góry i pozdrawiam.
0

Przecież question to zmienna lokalna funkcji (w tym przypadku konstruktora), więc po wyjściu z funkcji przestanie istnieć. Wyrzuć linię

Pytania question[4];

do deklaracji klasy, np. pod

Ui::MainWindow *ui;
0

Heheh .... no nie wierzę, że to było tak banalne :)
Dzięki za pomoc. Zadziałało, ale musiałem tak zrobić:

 
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>
#include <QString>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:

    void on_pushButton_next_clicked();

private:
    Ui::MainWindow *ui;

    struct Pytania
    {
        QString pytanie;
        QString odpowiedz[4];
    };
    Pytania question[4];
    int nr_pytania=1;
    void wczytaj_pytania();
};

Jak miałem strukturę poza klasą MainWindow to wyskakiwał błąd Pytania does not name type :)

Dzięki wielkie za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1