Dwa okna w Qt

0

Witam.
Proszę o sprawdzenie poprawności poniższego kodu:

#ifndef OKNO1_H
#define OKNO1_H

#include <QWidget>
#include <QTimer>
#include "okno2.h"

class okno1 : public QWidget
{
    Q_OBJECT
public:
    explicit okno1(QWidget *parent = 0);

public slots:
    void showOkno2();

};
#endif // OKNO1_H

#include "okno1.h"


okno1::okno1(QWidget *parent) :
    QWidget(parent)
{
  setWindowTitle("Okno1");
  QTimer::singleShot(1000, this, SLOT(showOkno2()));

}

void okno1::showOkno2(){
  okno2 *Okno2= new okno2();
  Okno2->show();
}
#ifndef OKNO2_H
#define OKNO2_H

#include <QtGui/QMainWindow>

class okno2 : public QMainWindow
{
    Q_OBJECT

public:
    okno2(QWidget *parent = 0);
    ~okno2();
};

#endif // OKNO2_H
#include "okno2.h"

okno2::okno2(QWidget *parent)
    : QMainWindow(parent)
{
  setWindowTitle("Okno2");
}

okno2::~okno2()
{

}
//main.cpp
#include <QtGui/QApplication>
#include "okno1.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    okno1 *Okno1 = new okno1();
    Okno1->show();

    return a.exec();
}

Czy powyższy kod jest prawidłowy?
Jak usunąć obiekt Okno1 ?

0

jest błędny bo masz 2x wyciek. Jak tworzysz przy pomocy new to usuwasz i zwalniasz pamięć przy pomocy delete (chyba, ze widget posiada rodzica, wtedy on się zajmuje usuwaniem i nie musisz tego stosować). W tym kodzie zarówno okno1 jak i okno2 dwa nie posiadają rodziców więc musisz sam zadbać o posprzątanie po nich.

0
#ifndef OKNO1_H
#define OKNO1_H

#include <QWidget>
#include <QTimer>
#include "okno2.h"

class okno1 : public QWidget
{
    Q_OBJECT
public:
    explicit okno1(QWidget *parent = 0);
private:
   okno2 *Okno2;

public slots:
    void showOkno2();

};
#endif // OKNO1_H

#include "okno1.h"


okno1::okno1(QWidget *parent) :
    QWidget(parent)
{
  setWindowTitle("Okno1");
  QTimer::singleShot(1000, this, SLOT(showOkno2()));

}

okno1::~okno1()
{
  delete Okno2;
}

void okno1::showOkno2(){
  Okno2= new okno2();
  Okno2->show();
}

Przerobiłem to w ten sposób. Poprawnie?
W jaki sposób usunąć okno1?

0
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    okno1 *Okno1 = new okno1();
    Okno1->show();
    int res = a.exec();
    delete Okno1;
    return res;
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    okno1 Okno1;
    Okno1.show();
    return a.exec();
}
0

Nie uruchamia się destruktor pierwszego okna.

0
Taumas napisał(a)

Nie uruchamia się destruktor pierwszego okna.

W obu przypadkach się uruchamia.

0

Dodałem do main'a treść z posta powyżej (przez operator new).
Okno1 nie znika, wiec coś jest nie tak.

0

musi działać, ale jeśli już tak się upierasz przy swoim to pozostaw maina takiego jak na początku miałeś (w pierwszym poście), a w konstruktorze klasy okno1 dodaj "setAttribute(Qt::WA_DeleteOnClose);" Wtedy będzie usuwać podczas zamknięcia.

0

Chyba nie do końca się zrozumieliśmy. Podany przez Ciebie destruktor oczywiście działa prawidłowo ( przy zamknięciu formy ), natomiast mi chodziło o to, że najpierw uruchamia się okno 1 (jakiś czas jest aktywne), po tym czasie uruchamia się okno2 jednocześnie zamykając okno1.

0

no to dodaj do konstruktora tego okno1 to co podałem wyżej, a w metodzie gdzie tworzysz drugie

void okno1::showOkno2(){
  okno2 *Okno2= new okno2();
  Okno2->show();
  close();
}

Przy czym pamiętaj żeby w konstruktorze tego drugiego również nadać atrybut niszczący podczas zamykania okna.

0

Rozwiązałem to poprzez zdeklarowanie sygnału w klasie okno1 , sygnał emituję podczas tworzenia okna2. Gdy sygnał podpięty jest pod slot deleteLater().

0

Jeśli masz problemy z QT to mogę polecić następujące strony (sam ostatnio trochę szukałem na ten temat), wymieniam te ciekawsze MZ:

http://blog.matthew.org.pl/ - po polsku !
http://blog.matthew.org.pl/2009/06/07/kurs-qt-czesc-2-qt-creator/ - tu jest trochę o QT creator

http://www.devqt.pl - polska strona o QT

co nieco można znaleźć też na polskim forum http://cpp0x.pl/

**Po angielsku ** jest oczywiście znacznie więcej, tu podaje kilka ciekawych stron:

http://sector.ynet.sk/qt4-tutorial/

http://www.tuxradar.com/content/qt-creator

http://www.qtcentre.org - sporo ciekawych informacji, zwłaszcza na forum

Na stronach NOKIA jest też sporo przykładów:
http://doc.qt.nokia.com/4.7/all-examples.html

Tu jest szeroki wybór książek:
http://developer.qt.nokia.com/books

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