Tworzenie nowego okna w QT Creator

0

Piszę w QT Designerze program. Napisałem już go w zasadzie, chce aby teraz po naciśnięciu buttona otwarło mi się nowe okno i narysowało mi w nim wykres. Z wykresem sobie poradzę, chodzi mi o to, jak zrobić nowe okno.

Klikam w button NARYSUJ i otwiera mi nowe okno (puste) w którym narysuje mi wykres, jak to zrobić ?
Dodam że jest to mój 1 dzień pisania w QT i jakieś bardziej skomplikowane operacje prosiłbym o je rozpisanie

0

W QtDesignerze tworzysz nowy Dialog bez niczego, wstawiasz na niego kontrolkę QGraphicsView (chyba, że jest inna, w której lepiej się rysuje wykresy ;) ), generujesz sobie klasę w języku jakiego używasz i masz gotowe okienko.

Aby je otworzyć, robisz coś na wzór tego (kawałek z mojego projektu w Python'ie z użyciem pyqt4):

wid=QtGui.QDialog()
ui = WykresWindow()
ui.setupUi(wid)
wid.show()

Jeśli chcesz "okienku" przekazać jakieś informacje (np. dane do wykresu) to w metodzie setupUi dodaj parametr jaki tam chcesz i przekaż z okna głównego.

0

Możesz stworzyć nowy QDialog, w którym wyświetlisz swój wykres.
W celu poznania klasy QDialog, odsyłam do dokumentacji Qt. Tam masz wszystko fajnie opisane.

1

QDialog niekoniecznie,zależy czego autor oczekuje od działania swojej aplikacji:
1.Jeżeli wykres ma tkwić i blokować inną funkcjonalność aplikacji póki się go nie zamknie,to faktycznie QDialog (modalny) będzie niezły
2.Ale jeśli ma się tylko otworzyć nowe okno "do popatrzenia" na ów wykres,i takich okien z wykresami może istnieć wiele wóczas lepiej oprzeć się o klasę QMainWindow.

Co main windowa,to zakładam,iż sobie ten wykres namalujesz używając QPaintera na jakimś swoim QWidgecie.Zatem stworzenie nowego okna po klinięciu uzyskasz w krokach:
-Zdefiniuj sobie nową klasę pochodną od QMainWindow,która jako składnik zawierać będzie widgeta służącego do malowania wykresu.

-W konstruktorze tej klasy zrób

setCentralWidget(&widgetMalującyWykres);

(zakładając,iż nie jest to wskaźnik oczywiście).Niewykluczone,że konstruktor tej swojej klasy okna będziesz musiał zmodyfikować tak,żeby przekazać odpowiednie dane do widgeta od wykresu.

-Kolejną rzeczą jaka się w konstruktorze przyda jest ustawienie atrybutu na automatyczne skasowanie po zamknięciu.Robisz to poprzez

setAttribute(Qt::WA_DeleteOnClose);

-Dalej to już prosto,w slocie do którego masz podłączony sygnał clicked() od guzika Narysuj robisz

TwojeOknoWykresów *wykres=new TwojeOknoWykresów(parametry);
wykres->show();

Ustawiony atrybut DeleteOnClose zadba o zwolnienie pamięci w momencie zamknięcia okna,więc nie będziesz musiał się martwić przechowaniem wskaźnika do nowo powstałego okna

0

Zrobiłem troszkę inaczej a mianowicie z QDialog.
W buttonie "Narysuj" mam :

 
    Dialog dial;
    dial.setWindowTitle("Wykres");
    dial.show();

ale niestety drugie okienko pojawia się i znika (taki błysk). Można wiedzieć czemu ?

@Edit ok mam :
Dobra poradziłem sobie, klasa MainWindow musi dziedziczyc Dialog

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