Atom Napisano Sierpień 27, 2010 Zgłoszenie Share Napisano Sierpień 27, 2010 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 More sharing options...
bunny1985 Napisano Sierpień 27, 2010 Zgłoszenie Share Napisano Sierpień 27, 2010 spróbuj np tak: Okno* o = new Okno(this); o->show(); Nie zapomnij o gwiazdce Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Atom Napisano Sierpień 29, 2010 Autor Zgłoszenie Share Napisano Sierpień 29, 2010 Dziękuję bunny1985 za odpowiedź, nie wiele osób chce mi w tym wydawało by się banalnym problemie pomóc. Niestety rozwiązanie nie działa. Przycisk działa tylko na jedno przyciśnięcie. Potem zamiera, a okno się nie pojawia. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
mlodir Napisano Sierpień 29, 2010 Zgłoszenie Share Napisano Sierpień 29, 2010 Pokaż plik okno.cpp. Może masz w konstruktorze jakieś błędy. Ps: witam na forum, od niedawna jestem szczęśliwym posiadaczem fedory 13:P Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Atom Napisano Sierpień 29, 2010 Autor Zgłoszenie Share Napisano Sierpień 29, 2010 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 More sharing options...
bunny1985 Napisano Sierpień 30, 2010 Zgłoszenie Share Napisano Sierpień 30, 2010 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 More sharing options...
esail Napisano Sierpień 30, 2010 Zgłoszenie Share Napisano Sierpień 30, 2010 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 More sharing options...
Atom Napisano Sierpień 30, 2010 Autor Zgłoszenie Share Napisano Sierpień 30, 2010 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 More sharing options...
bunny1985 Napisano Sierpień 31, 2010 Zgłoszenie Share Napisano Sierpień 31, 2010 no właśnie pisałem. W takim wypadku widget powinien pojawić się w środku okna, chyba,że podasz jako parametr parent 0 ( domyślny) . Esail też ma racje. Dlatego podunąłem utworzenie nowego wskaźnika. A bez tej spacji to nie ładnie wygląda Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morsik Napisano Sierpień 31, 2010 Zgłoszenie Share Napisano Sierpień 31, 2010 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 More sharing options...
Atom Napisano Sierpień 31, 2010 Autor Zgłoszenie Share Napisano Sierpień 31, 2010 Ehh widzę jeszcze się muszę wiele nauczyć Jeszcze raz dziękuję Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
esail Napisano Wrzesień 1, 2010 Zgłoszenie Share Napisano Wrzesień 1, 2010 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 More sharing options...
Rekomendowane odpowiedzi
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ę