c++ pin code bzw zahlen überprüfen



  • Hallo, weiss jmd wie man in QT GUI ein PIN erstellet, bzw soll die ausgabe meiner button in einem Label überprüft werden, bei richtigem pin soll etwas passieren.

    Mein Code bisher:

    #include "mainwindow.h"
    #include <iostream>

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)

    {

    setGeometry(50, 50, 1100, 900);
    
    _label = new QLabel(this);
    _label->setGeometry(250, 50 , 400 , 250);
    _label->setText("Bitte PIN eingeben");
    _label->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
    _label->setMargin(50);
    
    _labelAusgabe = new QLabel(this);
    _labelAusgabe->setGeometry(650, 250 , 150 , 50);
    _labelAusgabe->setText(" ");
    // _labelAusgabe->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
    _labelAusgabe->setMargin(50);
    
    _labelAusgabe1 = new QLabel(this);
    _labelAusgabe1->setGeometry(250, 250 , 550 , 550);
    _labelAusgabe1->setText(" ");
    _labelAusgabe1->setAlignment(Qt::AlignTop | Qt::AlignHCenter);
    _labelAusgabe1->setMargin(50);
    
    
    
    QPalette Pal(palette());
    Pal.setColor(QPalette::Window, QColor(0, 122, 150));
    Pal.setColor(QPalette::WindowText, QColor(175, 125 , 75));
    
    QPalette Pal1(palette());
    Pal1.setColor(QPalette::Window, QColor(100, 100, 150));
    Pal1.setColor(QPalette::WindowText, QColor(0, 0 , 0));
    
    
    
    _label->setPalette(Pal);
    _label->setAutoFillBackground(true);
    
    _labelAusgabe->setPalette(Pal1);
    _labelAusgabe->setAutoFillBackground(true);
    
    _button1 = new QPushButton("bestaetigen", this);
    _button1->setGeometry(800,200,100,50);
    
    _button2 = new QPushButton("1", this);
    _button2->setGeometry(650,50,50,50);
    
    _button3 = new QPushButton("2", this);
    _button3->setGeometry(700,50,50,50);
    
    _button4 = new QPushButton("3", this);
    _button4->setGeometry(750,50,50,50);
    
    _button5 = new QPushButton("4", this);
    _button5->setGeometry(650,100,50,50);
    
    _button6 = new QPushButton("5", this);
    _button6->setGeometry(700,100,50,50);
    
    _button7 = new QPushButton("6", this);
    _button7->setGeometry(750,100,50,50);
    
    _button8 = new QPushButton("7", this);
    _button8->setGeometry(650,150,50,50);
    
    _button9 = new QPushButton("8", this);
    _button9->setGeometry(700,150,50,50);
    
    _button10 = new QPushButton("9", this);
    _button10->setGeometry(750,150,50,50);
    
    _button11 = new QPushButton("0", this);
    _button11->setGeometry(700,200,50,50);
    
    _button12 = new QPushButton("<-", this);
    _button12->setGeometry(750,200,50,50);
    
    _button13 = new QPushButton("*", this);
    _button13->setGeometry(650,200,50,50);
    
    
    
    
    
    // Zustandsübergänge
    connect(_button1, &QPushButton::clicked, this, [=]() { this->pinCode(); });
    connect(_button2, &QPushButton::clicked, this, [=]() { this->ziffern('1'); });
    connect(_button3, &QPushButton::clicked, this, [=]() { this->ziffern('2'); });
    connect(_button4, &QPushButton::clicked, this, [=]() { this->ziffern('3'); });
    connect(_button5, &QPushButton::clicked, this, [=]() { this->ziffern('4'); });
    connect(_button6, &QPushButton::clicked, this, [=]() { this->ziffern('5'); });
    connect(_button7, &QPushButton::clicked, this, [=]() { this->ziffern('6'); });
    connect(_button8, &QPushButton::clicked, this, [=]() { this->ziffern('7'); });
    connect(_button9, &QPushButton::clicked, this, [=]() { this->ziffern('8'); });
    connect(_button10, &QPushButton::clicked, this, [=]() { this->ziffern('9'); });
    connect(_button11, &QPushButton::clicked, this, [=]() { this->ziffern('0'); });
    connect(_button12, &QPushButton::clicked, this, [=]() { this->ziffern(' '); });
    connect(_button13, SIGNAL(clicked()), this, SLOT(ziffere12()));
    

    }

    MainWindow::~MainWindow()
    {
    }

    void MainWindow::pressMe()
    {

    QPalette Pal(palette());
    Pal.setColor(QPalette::Window, QColor(122, 122, 150));
    Pal.setColor(QPalette::WindowText, QColor(100, 214 , 233));
    _label->setPalette(Pal);
    _label->setAutoFillBackground(true);
    

    }

    void MainWindow::ziffern(const QChar& value) // Ausgabe Ziffern nummern
    {
    //QString ausgabe;
    //QString temp;
    //ausgabe.append(" ");
    //ausgabe.append(temp);

     _labelAusgabe->setText(_labelAusgabe->text().append(value));
    
    
      // _labelAusgabe->setText(_labelAusgabe->text());
    

    }

    void MainWindow::pinCode(){ // 4 Stelliger PIN Code / Türe bzw. Richtige oder Falsche abgabe wird angezeigt

    int pin = 0;
    if(pin==1234)
    {
    QPalette Pal(palette());
    Pal.setColor(QPalette::Window, QColor(10, 80, 25));
    Pal.setColor(QPalette::WindowText, QColor(10, 80 , 25));
    _label->setPalette(Pal);
    _label->setText("Richtiger PIN");
    _label->setAutoFillBackground(true);
    }
    else
    {
    QPalette Pal(palette());
    Pal.setColor(QPalette::ButtonText, QColor(255, 25, 0));
    Pal.setColor(QPalette::Window, QColor(255, 25, 0));
    _button1->setPalette(Pal);
    _label->setPalette(Pal);
    Pal.setColor(QPalette::ButtonText, QColor(255, 20, 0));
    _label->setText("Falscher PIN");

    }
    }



  • Wenn der Pin-Code in dem Label _labelAusgabe steht, dann lese einfach dessen Text aus:

    string pincode = _labelAusgabe.text();
    

    (so wie du ja auch in ziffern darauf zugreifst)



  • @Th69 funktioniert leider iwie nicht



  • Was genau funktioniert denn nicht?
    Zeige mal deinen geänderten Code (der Funktion pinCode).



  • @Th69 sry für die späte antwort, soweit bin ich bisher gekommen

    void MainWindow::pinCode(){ //

    QString pin =_labelAusgabe->text();
    int n = pin.toInt();
    If(pin<=1||pin>=1)
    {
    QPalette Pal(palette());
    Pal.setColor(QPalette::Window, QColor(10, 80, 25));
    Pal.setColor(QPalette::WindowText, QColor(10, 80 , 25));
    _label->setPalette(Pal);
    _label->setText("Richtiger PIN");
    _label->setAutoFillBackground(true);
    }
    else
    {
    QPalette Pal(palette());
    Pal.setColor(QPalette::ButtonText, QColor(255, 25, 0));
    Pal.setColor(QPalette::Window, QColor(255, 25, 0));
    _button1->setPalette(Pal);
    _label->setPalette(Pal);
    Pal.setColor(QPalette::ButtonText, QColor(255, 20, 0));
    _label->setText("Falscher PIN");

    }
    }



  • Die Abfrage

    If(pin<=1||pin>=1)
    

    macht ja so auch keinen Sinn (außerdem noch der Syntaxfehler wegen dem großen I), denn sie ist immer erfüllt.
    Oben hattest du doch schon die Abfrage so:

    if(pin==1234)
    

    Das sind aber Grundlagen von C++ (bzw. fast jeder Programmiersprache).
    Vllt. wäre es besser, du würdest ersteinmal anhand von Konsolenprogrammen diese lernen, anstatt gleich schon mit einem Framework wie Qt anzufangen?!

    PS: Hier im Forum solltest du den Code in entsprechende Code-Tags setzen (der Button </>) neben der Combobox im Editor.



  • @Th69 da hast du recht, leider ist es eine abgabe die benotet wird. Deswegen muss ich das iwie hinbekommen. Nun bekomm ich aber die fehlermeldung " conversation from int to QChar is ambigious. Ausserdem muss ich das Label in "Ziffern" nicht zu erst in ein QString umwandeln ? Vielen Dank für deine hilfe



  • @Th69 Klappt nun, danke



  • @Th69 Hey, hättest du eine Idee wie ich das machen könnte, wenn der PIN drei mal falsch eingegeben wurde, dass man zum freischalten dann ein "Mastercode" braucht um die Code eingabe wieder freizuschalten?


  • Mod

    Ich bin zwar nicht Th69 (warum stellst du die Frage nur an ihn?), aber: Indem du dir die nötigen Informationen dazu irgendwo merkst, und dann an den nötigen Stellen überprüfst, bzw. änderst.



  • @SeppJ gute frage. könntest du mir da ein tipp geben? bin noch im lernprozess & hab leider keine idee. Vielen Dank


Anmelden zum Antworten