Seite 1 von 1

Password strengh ermitteln ?

Verfasst: 29. Oktober 2007 13:55
von nsd
Als erstes grüsse ich erstmal die community und erwähne auch mal nebenbei das es meine ersten Schritte mit QT sind.

[Entwicklung unter Windows mit Eclipse QT version 4.3]
Meine Problemstellung ist folgende und zwar will ich per eingabe in ein QlineEdit auf ner Progressbar anzeigen wie sicher die Eingabe als passwort wäre. Ich erhalte jedoch keine Anzeige auf dem Progressbar. Das Signal Slot Konzept wird eigentlich simpel erklärt, jedoch weis ich nun nicht, ob ich im SLOT on_lineEditPassword_textChanged den neuen ermittelten Wert an das Signal valueCalculated übergeben kann. Weil dann müsste eigentlich der vordefinierte Slot vom Progressbar setValue den neuen wert erhalten .?

Wie gesagt, das sind meine ersten Schritte, und es wäre super wenn jemand mir helfen könnte.

main.cpp

Code: Alles auswählen

#include "GuiMain.h"
#include <QtGui>
#include <QtCore>
#include <QApplication>




int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Guimain w;
    w.show();
    a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
    return a.exec();
}

Guimain.h

Code: Alles auswählen

#ifndef GUIMAIN_H
#define GUIMAIN_H

#include <QtGui/QWidget>
#include "ui_test.h"
#include <QString>

class Guimain : public QWidget,
		       private Ui::GuimainClass
{
    Q_OBJECT

public:
    Guimain(QWidget *parent = 0);
    ~Guimain();

private:
    Ui::GuimainClass ui;
    
protected slots:
		void on_lineEditPassword_textChanged(const QString & text);
		
		
signals:
		void valueCalculated(int);
};

#endif // GUIMAIN_H
Guimain.cpp

Code: Alles auswählen

#include "GuiMain.h"
#include <QVBoxLayout>
#include <QLineEdit>
#include <QtCore>
#include <QProgressBar>
#include <QRegExp>
#include <QLabel>
#include "math.h"


Guimain::Guimain(QWidget *parent)
    : QWidget(parent)
{
	ui.setupUi(this);
	
	//QVBoxLayout* Layout = new QVBoxLayout();
	QLineEdit * lineEditPassword = new QLineEdit(this);
	lineEditPassword->setGeometry(0,0,100,20);
	QProgressBar * progressBar = new QProgressBar(this);
	progressBar->setGeometry(105,0,300,20);
	progressBar->setMaximum(20);
	progressBar->setMinimum(0);
		
	    //Layout->addWidget(lineEditPassword);
	    //Layout->addWidget(progressBar);
	 
	
	connect(lineEditPassword,SIGNAL(textChanged(const QString&)),
			 lineEditPassword,SLOT(on_lineEditPassword_textChanged(const QString& text)));
	
	connect(lineEditPassword,SIGNAL(valueCalculated(int)),
			progressBar,SLOT(setValue(int)));

}

Guimain::~Guimain()
{
	
}

void 
Guimain::on_lineEditPassword_textChanged(const QString& text)
{
		
	QRegExp grossB= QRegExp("ABCDEFGHIJKLMNOPQRSTVUWXYZ");
	int gb=text.count(grossB);
	
	QRegExp kleinB= QRegExp("abcdefghijklmnopqrstvuwxyz");
	int kb=text.count(kleinB);
	
	QRegExp zahlen= QRegExp("0123456789");
	int zahl=text.count(zahlen);
	
	QRegExp fremdzeichen= QRegExp("^°!§$%&=?`´+*~#,.-_:;");
	int fremd=text.count(fremdzeichen);
	
	int value = log10(26^gb)+log10(26^kb)+log10(10^zahl)+log10(20^fremd);
	emit valueCalculated(value);
	

	
}

Verfasst: 29. Oktober 2007 14:17
von Christian81

Code: Alles auswählen

   connect(lineEditPassword,SIGNAL(textChanged(const QString&)),
          lineEditPassword,SLOT(on_lineEditPassword_textChanged(const QString& text)));

keine Variablennamen angeben!

Das siehst Du übrigens auch während der Laufzeit (entweder im MSVC Debugger oder mit Hilfe von 'CONFIG += console' in der Konsole)

Verfasst: 29. Oktober 2007 14:23
von macman
Das kann so nicht funktionieren. Kommt beim Start nicht die Meckermeldung 'no such slot' beim ersten Connect auf der Konsole? Hmm, hat Christian schon geschrieben :-)

lineEditPassword hat auch kein Signal valueCaculated, bekommt es auch nicht, wenn Du das Signal in GuiMain deklarierst. Entweder von QLineEdit ableiten oder einfach die Methode der ProgressBar aufrufen. Slots sind nämlich nichts anderes.

Verfasst: 29. Oktober 2007 14:29
von nsd
da kommt überhaupt keine fehlermeldung :/
ohh der zweite connect sollte so lauten

Code: Alles auswählen

connect(progressBar,SIGNAL(valueCalculated(int)),
			this,SLOT(setValue(int)));

Verfasst: 29. Oktober 2007 14:30
von Christian81
nsd hat geschrieben:da kommt überhaupt keine fehlermeldung :/
Doch - wenn Du die Option in das pro-File einträgst so wie ich es geschrieben habe. Was soll ich noch mehr machen?? :roll:

Verfasst: 29. Oktober 2007 14:35
von Sephral
Hallo,

ich fasse noch mal kurz zusammen...

Versuche es mal damit:

* Benenne Deinen Slot um in "calculateSecurity(const QString& text)"

Und dann Deinen Code ersetzen durch...

Code: Alles auswählen

   connect(lineEditPassword,SIGNAL(textChanged(const QString&)),
          this,SLOT(calculateSecurity(const QString&)));
   
   connect(this,SIGNAL(valueCalculated(int)),
         progressBar,SLOT(setValue(int))); 
Du hast auch versucht manuelles und automatisches Verbinden von Signals&Slots zu mischen. Wenn du Slots wie "on_lineEditPassword_textChanged" anlegst, dann wolltest du offenbar auf das automatische connect von Qt hinaus. Dann wäre das manuelle connecten nicht mehr notwendig.

Ich persönlich verbinde lieber manuell, da weiß man was die Anwendung macht :-)

Ciao,
Sephral

Verfasst: 29. Oktober 2007 17:00
von nsd
Ok, danke :) das mit dem automatischen Verbinden hab ich gerade nachgelesen. Jedoch war das auch nicht die Lösung :/

Verfasst: 29. Oktober 2007 19:52
von nsd
ok hat sich erledigt :) hab erst vorhin mit dem config +0 console gerafft :) mitm debug gehts halt besser und problem gelöst thx