Does not name o type, problem z klasą

Odpowiedz Nowy wątek
2011-06-28 18:33
0

Pisząc grę kółko i krzyżyk natrafiłem na pewien problem, wszystko działa jednak po sprawdzeniu wyników chciałbym wyświetlić dialog, pobrać z głównego okna(MainWindow) zmienną wygrana(QString) i wyświetlić jej zawartość w utworzonym dialogu.

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT;

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

wywołuje dialog w mainwindow.cpp

 mydialog.exec();

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
#include "mainwindow.h"
#include <QDialog>

namespace Ui {
    class dialog;
}
class dialog : public QDialog
{
    Q_OBJECT

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

private:
    Ui::dialog *ui;

};

#endif // DIALOG_H

błąd kompilatora:
'MainWindow' does not name a type dialog.h 17

Pozostało 580 znaków

2011-06-28 20:40
1

Hm a po co Ci MainWindow window w klasie dialog?Tworzysz przez to paskudne zapętlenie


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-06-28 20:41

Pozostało 580 znaków

2011-06-28 20:44
1
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog.h"

namespace Ui {
    class dialog; // <------
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT;

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   Ui::dialog *mydialog;  // <------
#ifndef DIALOG_H
#define DIALOG_H
#include "mainwindow.h"
#include <QDialog>

namespace Ui {
    class dialog;
    class MainWindow; // <------
}
class dialog : public QDialog
{
    Q_OBJECT

public:
    explicit dialog(QWidget *parent = 0);
    ~dialog();
     Ui::MainWindow *window; // <------

private:
    Ui::dialog *ui;

};

#endif // DIALOG_H

Pozostało 580 znaków

2011-06-28 21:14
0

MainWindow w dialogu potrzebuje żeby pobrać zmienną która zawiera nazwę zwycięzcy, chyba że jest inna możliwość przekazania tego?
Teraz skoro to jest wskaźnik to tworzę nowy obiekt tego typu:

mydialog = new dialog(); 

jednak po utworzeniu nie mam możliwości wywołać exec()?

Pozostało 580 znaków

2011-06-28 21:41
1

to należy rozwiązać np konstruktorem dialogu:

 explicit dialog(const QString &zwyciezca,QWidget *parent = 0);

Inna opcja to tworząc dialog w mainWindow przekazać go jako parenta:

mydialog = new dialog(this);

a następnie qobjectcastować/staticcastować sobie gdzieś w dialogu wynik funkcji parent() na mainWindow i dobierać się do zmiennej (o ile jest publiczna tudzież mainWindow kumpluje się z dialogiem)

I jak to nie ma możliwości uruchomić mydialog->exec()?!Wskaźnik do utworzonego obiektu masz,to co niby Ci miałoby bronić używać jego funkcji składowych?


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-06-28 21:41

Pozostało 580 znaków

2011-06-28 22:03
0

no niestety po utworzeniu obiektu

 mydialog = new dialog(this);

do mydialog intellisense nic nie pokazuje, kod

mydialog->exec();

wywala:

 cannot convert 'dialog*' to 'Ui::dialog' in assignment <- dotyczy tworzenia nowego obiektu mydialog
invalid use of incomplete type 'struct Ui::dialog'   <- proba wywolania exec()
forward declaration of 'struct Ui::dialog'  <- class dialog w namespace Ui

Pozostało 580 znaków

2011-06-28 22:29
1

Hmmm czas na coś drastycznego-powywalaj we wszystkie namespace Ui{} oraz Ui::coś z definicji

Opcjonalnie pałować się w rodzaju

dialog=new Ui::dialog(this);

tudzież wrzucać do .cpp using namespace Ui;


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: MasterBLB, 2011-06-28 22:31

Pozostało 580 znaków

2011-06-28 22:34
Markness
0
mydialog = new Ui::dialog(this) 

próbowałem ale ciągle to nic nie dawało, a wywalić mam z namespace tylko class dialog? jutro będę próbował bo aktualnie nie mam pod ręką creatora

cała konstrukcja namespace Ui{} wraz z zawartością oraz Ui:: w definicjach jest do odstrzału.A no i oczywiście żadnych includów krzyżowych ;] - MasterBLB 2011-06-28 22:46

Pozostało 580 znaków

2011-06-28 23:06

Źle to projektujesz i dlatego masz problemy.
Ten twój dialog nie powinien wiedzieć niczego o MainWindow!
A skąd wziąć dane o wygranym? Proste trzeba je dostarczyć.
W Dialog stwórz slot, który przyjmuje jako parametr daną, której ci brakuje (np void pokazZwyciesce(const QString &nazwaZwyciescy);). W tym slocie przetwórz tą daną odpowiednio i wywołaj exec().
Z MainWindow wywołasz sobie ten slot programowo, albo połączysz do odpowiedniego sygnału (twój wybór).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2011-06-29 11:19

Pozostało 580 znaków

2011-06-29 10:39
0

Ok, skorzystałem z pomocy MarekR22, utworzyłem slot w dialogu i wywołuje go z poziomu MainWindow. Dzięki wielkie za pomoc i zainteresowanie!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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