Anmeldefenster in VS 2019 mit QT

Bobi

Bekanntes Mitglied
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
Code:
#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
Code:
#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

Code:
#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
Code:
on_pushButton_Login_clicked()
functioniert nicht.

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

M.L.

Top Contributor
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

Bekanntes Mitglied
@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.

Top Contributor
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
Code:
 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

Bekanntes Mitglied
@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
Code:
  QObject::connect(registrierenButton, SIGNAL(clicked()), this, SLOT(registrier_Fester_Offnen()));

In Anmeldefenster. h habe ich so definiert.
Code:
    /*  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?
Code:
private:
    Ui::AnmeldefensterClass ui;  //in Anmeldefenster.h

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

M.L.

Top Contributor
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/
 

M.L.

Top Contributor
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)
 

Anhänge

  • VS_2019_Community_Qt_5_Plugin_Fehlermeldungen.png
    VS_2019_Community_Qt_5_Plugin_Fehlermeldungen.png
    93,3 KB · Aufrufe: 130

Bobi

Bekanntes Mitglied
@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.
 

Neue Themen


Oben