# Anmeldefenster in VS 2019 mit QT



## Bobi (6. Okt 2019)

Guten Abend Leute. 

Ich habe eine Aufgabe und zwar muss ich eine Anmeldefenster in C++ mit Qt programmieren. 
Ich kenne nicht viele mit C++ und besonders auch nicht mit Qt aus. 

Ich möchte zuerst ein einfaches Anmeldefenster haben und danach kommt auch Registirerfenster  und vielleicht paar Fenster noch andere. 
Ich habe eine Methode von Youtube übernommen die nicht in meine Code funktioniert und  ich weiß nicht wieso. 
Vielleicht könnt Ihr mir helfen. 

Anmeldefenster.cpp

```
#include "Anmeldefenster.h"
#include <QPushButton>
#include <QLineEdit.h>
#include <Qtcore>
#include <QLabel.h>
#include <QLineEdit>



Anmeldefenster::Anmeldefenster(QWidget *parent) : QMainWindow(parent)
{
    
    ui.setupUi(this);
    this->setFixedSize(350, 250);
    
    

    QLabel* BenutzerLabel = new QLabel("Benutzername:", this);
    BenutzerLabel->setGeometry(50, 50, 80, 30);    

    QLabel* PasswortLabel = new QLabel("Passwort:", this);
    PasswortLabel->setGeometry(50, 100, 80, 30);  
    
    QLineEdit* BenutzerLineEdit = new QLineEdit(this);
    BenutzerLineEdit->setPlaceholderText("Enter your userename");
    BenutzerLineEdit->setGeometry(200, 50, 110, 30);
    //SBenutzerLineEdit->setFocus();
    

    QLineEdit* PasswortLineEdit = new QLineEdit(this);
    PasswortLineEdit->setPlaceholderText("Enter your Passwort");
    PasswortLineEdit->setGeometry(200, 100, 110, 30);
    PasswortLineEdit->setEchoMode(QLineEdit::Password);
    //PasswortLineEdit->setFocus();
    

    QPushButton* button = new QPushButton("Anmelden", this);
    button->setGeometry(200, 170, 110, 30);

    QPushButton* Registrieren = new QPushButton("Registrieren", this);
    Registrieren->setGeometry(50, 170, 110, 30);


    void Anmeldefenster::on_pushButton_Login_clicked()
    {
        QString username = ui->lineEdit_username->text();
        QString password = ui->lineEdit_password->text();

        if (username == "test" && password == "test") {
            QMessageBox::information(this, "Login", "Username and password is correct");
            //hide();
            secDialog = new SecDialog(this);
            secDialog->show();
        }
        else {
            QMessageBox::warning(this, "Login", "Username and password is not correct");
        }
    }
    
}
```

main.cpp

```
#include "Anmeldefenster.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Anmeldefenster w;
    w.show();
    return a.exec();
}
```


Anmeldefenster.hide


```
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_Anmeldefenster.h"

class Anmeldefenster : public QMainWindow
{
    Q_OBJECT

public:
    Anmeldefenster(QWidget *parent = Q_NULLPTR);

private:
    Ui::AnmeldefensterClass ui;


};
```
 
diese Funktion 
	
	
	
	





```
on_pushButton_Login_clicked()
```
 functioniert nicht. 

Danke schön im Voraus für eure Hilfe.


----------



## M.L. (11. Okt 2019)

Auf die Schnelle (und falls noch relevant):  wurden die Signale und Slots (also Sender und Empfänger von Nachrichten) auch richtig / überhaupt definiert ?   Ausserdem kann man den QTCreator verwenden


----------



## Bobi (12. Okt 2019)

@M.L ich habe das Problem noch nicht gelost. 
Ja genau wie ich heraus gefunden haben mir fehlt Signals und Slots und ich weiß nicht wie ich es  mach. 
Im Youtube videos (z.B 



 ) alle machen mit QTCreator. Ich wollte es nicht benutzen, weil ich es verstehen will, wie es genau funktioniert.

Wies du wie kann ich die einsetze?


----------



## M.L. (12. Okt 2019)

Man muss zwar kein C++-Guru auf dem neusten Stand sein um gegen ein Framwork wie QT zu programmieren, aber das Wissen um die Hintergründe kann generell nie schaden.    

Zum Video: es wird eine ältere QT-Version und QTCreator-IDE verwendet und bei 8:27  sieht man in der mainwindow.h auch den Befehl   
	
	
	
	





```
private slots:
  void on_pushButton_clicked();
```
   Im ersten Posting fehlen solche Codezeilen, diese sind also entweder über den Designer (VS mit QT-Plugin sollte so etwas auch haben) oder manuell (hier besteht die Gefahr, dass andere Stellen ebenfalls manuell informiert werden wollen)  hinzuzufügen.   Als Beispiel für mehrere private Slots das Taschenrechnerbeispiel aus der Doku: https://doc.qt.io/qt-5/qtwidgets-widgets-calculator-example.html    (SIGNAL dann bei  "::createButton" )


----------



## Bobi (13. Okt 2019)

@M.L mit Slots und Signals ich glaube ein bisschen verstanden. 
Aber es funktioniert trotzdem nicht. Wenn ich z.B auf Registrier Button  klicke verschwindet das ganze Fenster aber das neue wird nicht angezeigt. 
Mein Slot und Signal sieht so in Anmeldefenster.ccp 

```
QObject::connect(registrierenButton, SIGNAL(clicked()), this, SLOT(registrier_Fester_Offnen()));
```

In Anmeldefenster. h habe ich so definiert.

```
/*  Ich habe signal auskommentiert weill ich sonst Error bekomme. 
signals:
    void registrier_Fester_Offnen();
    */

private slots:
    void registrier_Fester_Offnen();
```

Ich habe noch eine Frage was machen diese Zeile Code?

```
private:
    Ui::AnmeldefensterClass ui;  //in Anmeldefenster.h

private:
    Ui::RegistrierFenster *ui; // in Registrierfenster ´.h
```


----------



## M.L. (13. Okt 2019)

Das Video Nr. 10 geht eher auf das Signal/Slot-Konzept ein (wenn auch nur am Rand). Ausserdem sollte man beachten, dass Qt5 diesbezüglich einige Änderungen inne hat: https://wiki.qt.io/New_Signal_Slot_Syntax/de, S&S Qt 4.8, S&S Qt5
Welche Versionen von Visual Studio und QT werden verwendet ?



> Ich habe noch eine Frage was machen diese Zeile Code?


Das Qt-Framework setzt stringent auf den Einsatz von Klassen (wie Java, auch mit Konstruktoren)  , Zeigern (Bspl.: *ui, *parent) und Referenzen (Bspl.: a.exec(), &Sender ).  Mitglieder einer Klasse werden in C++ mit :: gekennzeichnet: https://www.geeksforgeeks.org/c-classes-and-objects/


----------



## Bobi (13. Okt 2019)

@M.L Ich nutze VS2019.
Ich finde komisch, was bei anderen funktioniert bei mir funktioniert es nicht.


----------



## M.L. (13. Okt 2019)

> Ich nutze VS2019.


Testrechner mit VS 2019 Community Edition und QT 5-Plugin: ein einfaches Anlegen eines Projekts führte zu Fehlermeldungen, siehe den Anhang als Screenshot


> Ich finde komisch, was bei anderen funktioniert bei mir funktioniert es nicht.


 Das kann viele Gründe haben: andere QT / VS-Version,  zu verwendende Bibliotheken anders eingebunden,  notwendige Handgriffe gemacht (z.B. in der .pro-Datei),...
Übrigens sollte man C++ (oder eine Programmiersprache generell) gerade nicht anhand eines Frameworks kennenlernen.  I.V. mit QT wäre qmake und die Kommandozeile das besser passende: https://doc.qt.io/qt-5/qmake-tutorial.html oder für Qt 4.8 (das Projekt sollte man vrmtl. auch "zu Fuss" neu programmieren)


----------



## Bobi (16. Okt 2019)

@M.L Danke dass du mir noch geantwortet hast. 
Also ich bekomme keine Fehlermeldung mehr. Erstes Fenster wird problemlos angezeigt aber zweites Fenster wird nicht mehr angezeigt. VS läuft aber zweite Fenster ist nicht da und auch keine Fehlermeldung.

Ich habe jetzt geguckt und ich finde keine (.pro) Datei wahrscheinlich muss ich manuell erstellen.


----------



## M.L. (16. Okt 2019)

> finde keine (.pro) Datei wahrscheinlich muss ich die manuell erstellen.


 Das kann (auch) sein...
Zwecks vermutlich kompetenterem Rat könnte man das Problem unter https://www.qtforum.de/  mal schildern.


----------



## Bobi (18. Okt 2019)

@M.L ich habe das Problem gelöst. 
Vielen Dank für die Hilfe.


----------

