Masterpc16 Temat założony przez niniejszego użytkownika |
Utworzenie i zamknięcie nowego okna w qt creator » 2015-12-10 21:36:18 Witajcie mam do Was małą prośbę. Potrzebowałem stworzyć nowe okno po kliknięciu w przycisk w Internecie znalazłem kod zaimplementowałem go działa bez zarzutu tylko mam mały problem nie do końca go rozumiem void MainWindow::on_actionRejestracja_triggered() { newwindow * noweOkno = new newwindow(); noweOkno->show(); }
z tą drugą linijką mam problem :/ pliki które utworzyłem do dodatkowego okna mają nazwy newwindow i odpowiednie rozszerzenia gdyby ktoś mógł mi wytłumaczyć tą drugą linijkę wyraz po wyrazie to byłbym wdzięczny :) I jeszcze jedno pytanie mi się nasunęło edytuję plik newwindow.cpp i chcę je zamknąć przez wciśnięcie przycisku anuluj void newwindow::on_pushAnuluj_clicked() { qApp->exit(); }
ale gdy takiej konstrukcji użyję to zamyka mi się to okno i to poprzednie a chcę zamkną tylko to newwindow. Jestem początku próbowałem zamiast qApp dać newwindow ale wywalało błąd :/ Jeszcze mam problem z wpisaniem tekstu do zmiennej w tym nowym oknie zmienną utworzyłem newwindow.cpp i chcę pobrać tekst wpisany z pola LineEdit do tej zmiennej w mainwindow działa mi to bez problemu ale tu nie wyskakuje mi komunika ui was not declared in this scope poniżej zamieszczam kod pliku newwindow.cpp #include "newwindow.h" #include "ui_newwindow.h" #include <QString>
QString log;
newwindow::newwindow( QWidget * parent ) : QWidget( parent ) , ui( new Ui::newwindow ) { ui->setupUi( this ); }
newwindow::~newwindow() { delete ui; }
void newwindow::on_pushAnuluj_clicked() { qApp->exit(); } void zarejestruj() { log = ui->lineLogin->text(); }
void sprawdzenieHasla() { } void sprawdzenieEmail() { }
Weźcie pod uwagę że dopiero zaczynam przygodę z qt :) |
|
mateczek |
» 2015-12-11 09:39:54 https://www.youtube.com/watch?v=eR6VRQFCemYmój kurs !!! na youtube void MainWindow::on_actionRejestracja_triggered() { newwindow * noweOkno = new newwindow(); noweOkno->show(); }
ale gdy takiej konstrukcji użyję to zamyka mi się to okno i to poprzednie a chcę zamkną tylko to newwindow |
jeśli rozwiązanie z kursu Ci nie leży to wiedz, że wewnątrz klasy używasz "this" by mieć wskaźnik na obiekt klasy !!! void newwindow::on_pushAnuluj_clicked() { this->close(); }
|
|
Virpi |
» 2015-12-11 11:28:42 Ja zwykle robię tak: void CQWindow::myShow( QString _title ) { if( exec() == QDialog::Accepted ) { } else { } }
A w kodzie okno otwiera się przykładowo tak: CQWindow window; window.myShow( "Jestem nowym oknem" );
|
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2015-12-11 12:32:36 Dzięki już patrzę na Twój kurs. |
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2015-12-11 13:00:47 A czy mogę ominąć konstrukcję if? Czyli: mainwindows.cpp #include "mainwindow.h" #include "newwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QString>
QString haslo, haslo1, rehaslo1, login, login1, email; MainWindow::MainWindow( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::MainWindow ) { ui->setupUi( this ); }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::zaloguj() { login = ui->textLogin->text(); haslo = ui->textHaslo->text(); if( login == login1 && haslo == haslo1 ) { QMessageBox::information( this, tr( "Raport" ), "Zalogowano poprawnie witamy w programie" ); } else if( login != login1 && haslo == haslo1 ) { QMessageBox::information( this, tr( "Błąd" ), "Podałeś błędny login!" ); ui->textHaslo->clear(); ui->textLogin->clear(); } else if( login == login1 && haslo != haslo1 ) { QMessageBox::information( this, tr( "Błąd" ), "Podałeś błędne hasło!" ); ui->textHaslo->clear(); ui->textLogin->clear(); } else if( login != login1 && haslo != haslo1 ) { QMessageBox::information( this, tr( "Błąd" ), "Podałeś błędny login i hasło!" ); ui->textHaslo->clear(); ui->textLogin->clear(); } } void MainWindow::on_actionZamknij_triggered() { qApp->exit(); }
void MainWindow::on_przyciskZaloguj_clicked() { zaloguj(); }
void MainWindow::on_przyciskAnuluj_clicked() { qApp->exit(); }
void MainWindow::on_zarejestrujSie_clicked() { newwindow noweOkno; noweOkno.show(); }
Zamykanie ze wskaźnikiem this działa tylko mam problem z wyświetleniem tego okna by zostało. Jak potrzeba innego pliku to zamieszczę kod tylko napiszcie jaki. |
|
mateczek |
» 2015-12-11 16:02:10 rozwiązania masz dwa proste kilka trudniejszych! 1. użyć zamiast okienko.show() urzyć okienko.exec metoda blokuje dostęp do okna głównego i czeka na potwierdzenie accept lub reject() - masz wartość zwróconą (ok lub anuluj) https://pl.wikibooks.org/wiki/Programowanie_C%2B%2B_Qt4_w_systemie_Gnu-Linux/Okno_g%C5%82%C3%B3wne_i_okno_dialogowe (jak na kursie) 2. tworzysz obiekt nowego okna operatorem new, tyle że w konstruktorze!!!. Raz!!!, a nie za każdym razem po wciśnięciu przycisku. Możesz wówczas wywołać okienko metodą show() #include "mainwindow.h"
#include "ui_mainwindow.h" #include <QMessageBox> #include <QString>
QString haslo, haslo1, rehaslo1, login, login1, email; MainWindow::MainWindow( QWidget * parent ) : QMainWindow( parent ) , ui( new Ui::MainWindow ) { ui->setupUi( this ); okienko = new newwindow; }
MainWindow::~MainWindow() { delete ui; delete okienko; }
void MainWindow::on_zarejestrujSie_clicked() { noweOkno->show(); }
w pliku mainwidnow.h jako składnik klasy deklarujesz wskaźnik!!! masz kontrole nad wskaźnikiem i nie tworzysz 20 instancji okna dialogowego za każdym kliknięciem w przycisk!!! #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "newwindow.h" #include <QMainWindow>
class MainWindow : public QMainWindow { Q_OBJECT newwindow * okienko; public: MainWindow();
|
|
Masterpc16 Temat założony przez niniejszego użytkownika |
» 2015-12-11 18:37:11 Wielkie dzięki :) A jeszcze próbuję by przy otwarciu programu pokazuje się główne okno to żeby pokazało się okno stworzone przeze mnie (nic nie klikam tylko otwieram program i już). Poradziłem sobie z tym ale tylko mógłbyś mi powiedzieć czy to jest prawidłowo(to okno otwiera się tylko i wyłącznie raz) to jest kod pliku main.cpp #include "mainwindow.h" #include "logowanie.h" #include <QApplication>
int main( int argc, char * argv[] ) { QApplication a( argc, argv ); MainWindow w; w.show(); Logowanie * login; login = new Logowanie; login->show(); return a.exec(); }
|
|
« 1 » |