Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Utworzenie i zamknięcie nowego okna w qt creator

Ostatnio zmodyfikowano 2015-12-11 18:37
Autor Wiadomość
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
C/C++
void MainWindow::on_actionRejestracja_triggered() //to jest funkcja kliknięcia w przycisk
{
    newwindow * noweOkno = new newwindow(); // i tego właśnie nie rozumiem
   
    noweOkno->show(); // tutaj jest komenda odpowiedzialna za wyświetlenie okna
}

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
C/C++
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
C/C++
#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(); // błąd dotyczy tej linijki
}

void sprawdzenieHasla()
{
   
}
void sprawdzenieEmail()
{
   
}

Weźcie pod uwagę że dopiero zaczynam przygodę z qt :)
P-141735
mateczek
» 2015-12-11 09:39:54
https://www.youtube.com/watch​?v=eR6VRQFCemY
mój kurs !!! na youtube
C/C++
void MainWindow::on_actionRejestracja_triggered() //to jest funkcja kliknięcia w przycisk
{
    newwindow * noweOkno = new newwindow(); // tworzenie obiektu za pomocą operatora new !!!
    //klasa newwindow musi być gdzieś indziej zdefiniowana!!!
    //takie podejście chyba niezbyt zdrowe bo po wyjściu z funkcji zgubisz wskaźnik !!! i będziesz miał wyciek pamięci
    //jest kilka sposobów na ominięcie wycieku jednym z nich jest użycie normalnej deklaracj w stylu
    //newwindow noweOkno; //tak ja w kursie!!! można pokombinować z właściwościami zniszcz kiedy zamykasz itp idt ...
   
    noweOkno->show(); // tutaj jest komenda odpowiedzialna za wyświetlenie okna
}

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 !!!
C/C++
void newwindow::on_pushAnuluj_clicked()
{
    this->close();
}
P-141747
Virpi
» 2015-12-11 11:28:42
Ja zwykle robię tak:
C/C++
void CQWindow::myShow( QString _title /*przykładowy parametr*/ )
{
    //tutaj możemy wypełnić nasze okno np. w zależności od parametrów wywołania tej metody
    //np setWindowTitle(_title);
   
    if( exec() == QDialog::Accepted )
    {
        //jeśli klikniemy tak
    }
    else
    {
        //jeśli klikniemy nie
    }
}

A w kodzie okno otwiera się przykładowo tak:
C/C++
CQWindow window;
window.myShow( "Jestem nowym oknem" );
P-141751
Masterpc16
Temat założony przez niniejszego użytkownika
» 2015-12-11 12:32:36
Dzięki już patrzę na Twój kurs.
P-141757
Masterpc16
Temat założony przez niniejszego użytkownika
» 2015-12-11 13:00:47
A czy mogę ominąć konstrukcję if?
Czyli:
mainwindows.cpp
C/C++
#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; //tworzę obiekt klasy newwindow
   
    noweOkno.show(); //pokazuję ten obiekt tylko że gdy kliknę w przycisk zarejestruj to się pokarze i ginie
}

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.
P-141759
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()

C/C++
#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!!!


C/C++
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "newwindow.h"
#include <QMainWindow>

class MainWindow
    : public QMainWindow
{
    Q_OBJECT
    newwindow * okienko;
   
public:
    MainWindow();

P-141773
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
C/C++
#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();
}
P-141781
« 1 »
  Strona 1 z 1