Skocz do zawartości

[qt]wywoływanie Okna


Atom

Rekomendowane odpowiedzi

Witam

Jestem początkującym programistą w QT. Nie za bardzo umie wywołać dodatkowe okno po przez przyciśnięcie przycisku. Sugerowałem się tym co tworzy automatycznie QT Creator ale przycisk zachowuje się jak by nie był obsługiwany.

 

Wywołuje następująco :

 

void MainWindow::on_pushButton_clicked()
{
    Okno o;
    o.show();
}

 

Drugi sposób wywołania który testowałem to :

 

void MainWindow::on_pushButton_clicked()
{
    
    okno = new Okno(this);
        okno->show();
}

 

Lecz w ten sposób przycisk można przycisnąć raz okno dodatkowe się nie pojawia a przycisk zamiera.

Mógł by mi ktoś powiedzieć w czym robię błąd. Oraz pokazać jak wywoływać łatwo i prosto dodatkowe okna budowane w QT Creator.

 

okno.h

#ifndef OKNO_H
#define OKNO_H

#include <QWidget>

namespace Ui {
    class Okno;
}

class Okno : public QWidget
{
    Q_OBJECT

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

//private:
    Ui::Okno *ui;
};

#endif // OKNO_H

 

Tak wygląda mój plik dodatkowego okna. Nic w nim nie ma ponieważ chce by wyskoczyło samo okno. Plik jest modyfikowany w zależności od metod wywoływania pokazanych wcześniej.

Odnośnik do komentarza
Udostępnij na innych stronach

Za wiele tu nie ma

 

okno.cpp

#include "okno.h"
#include "ui_okno.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"

Okno::Okno(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Okno)
{
    ui->setupUi(this);

}

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

Odnośnik do komentarza
Udostępnij na innych stronach

jeszcze raz. Naciskasz guzik i co się dzieje?

Sporóbuj odojść do tego , co nie działa.

Wywyołaj "Okno" bez przyciskania guzika gdzies w części programu.\

 

 

Popełniłem literówkę we wcześniejszej odpowiedzi, ( brak spacjki) , ale kompilator powinien wywalić błąd, gdzybyś tak wpisał.

jeszcze widzę że:

Okno dziedziczy po qwidget, a nie po QMainWindiow , Dlaczego?

W takim wypadku widget powinien pojawić się w środku okna, chyba,że podasz jako parametr parent 0 ( domyślny) .

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zadeklaruj zmienną okna jako globalną. Teraz robisz ją jako lokalną dla funkcji obsługi kliknięcia w przycisk. Po zakończeniu działania tej obsługi wszystkie zmienne lokalne są niszczone. Okno prawdopodobnie się pokazuje ale zbyt krótko by to zauważyć.

 

Es.

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązałem problem :)

bunny1985 Twój pomysł by prawie słuszny. Co do tej spacji to wszytko jedno mi kompilator łyka i tak i tak.

Po drobnej poprawce pomysłu bunny1985 okno wyskakuje ślicznie.

 

Okno*o = new Okno();
    o->show();

 

Po prostu nie potrzebny był parametr this. A co do zmiennych to lokalnie też ruszyło.

Jeden mankament który będę musiał rozwiązać to zablokowanie przycisku po jednym wciśnięciu. Teraz wygląda to tak jeśli wcisnę dwa razy przycisk wyskoczą dwa okna.

Jeszcze było pytanie dlaczego dziedziczy po QWidget bo drugie okno jest robione QWidget a nie MainWindow. Bynajmniej tak tworzyłem.

Wielkie dzięki za pomoc :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeden mankament który będę musiał rozwiązać to zablokowanie przycisku po jednym wciśnięciu. Teraz wygląda to tak jeśli wcisnę dwa razy przycisk wyskoczą dwa okna.

 

Poprostu zmienną o zadeklaruj globalnie zamiast lokalnie w funkcji, bo jeśli dasz lokalnie, to okno jest tworzone za każdym kliknięciem, jeśli globalnie, to tylko raz, i show będzie wywoływać tylko to jedno okno:

 

okno.h:

Okno *o;

i potem w okno.cpp

w konstruktorze okna nadrzędnego w ktorym jest przycisk
o = new Okno(0);

w funkcji przycisku:
o->show();

Odnośnik do komentarza
Udostępnij na innych stronach

Wszyscy kiedyś zaczynali. Życzę uporu :)

 

No i tak od siebie to QtCreator mocno ułatwia sprawy ;)

 

Es.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...