<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[Qt] Logindialog aufrufen]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe mich die letzten Tage etwas in Qt eingelesen und will ein paar Testprojekte erstellen.</p>
<p>Bei einem Dialog der für das Einlogen in eine MySQL Datenbank zuständig ist habe ich aber ein kleines Problem. (Habe alles ohne Designer/Creator erstellt.)<br />
hier die logindialog.h</p>
<pre><code class="language-cpp">#ifndef LOGINIALOG_H
#define LOGINDIALOG_H

#include &lt;QDialog&gt;
class QLabel;
class QLineEdit;
class QPushButton;

class LoginDialog : public QDialog
{
    Q_OBJECT //macro das für dialoge mit eigenen objecten nötig ist

public:
    LoginDialog(QWidget *parent = 0);  //constructor which tells the parent. default is no parent

private slots:
    bool try_to_connect();
    void on_LineEdit_textchanged();

private:
//elements that are on the form
    QLabel *userlabel;
    QLabel *pwdlabel;
    QLabel *infolabel;
    QPushButton *connectButton;
    QPushButton *closeButton;

public:
    QLineEdit *userlineEdit;
    QLineEdit *pwdlineEdit;
};

#endif
</code></pre>
<p>und hier die logindialog.cpp dazu</p>
<pre><code class="language-cpp">#include &lt;QtGui&gt;
#include &lt;QtSql&gt;

#include &quot;logindialog.h&quot;

LoginDialog::LoginDialog(QWidget *parent)
    : QDialog(parent)
{
    //initialize components
    userlabel = new QLabel(tr(&quot;&amp;Username&quot;));
    userlineEdit = new QLineEdit;
    userlabel-&gt;setBuddy(userlineEdit);
    pwdlabel = new QLabel(tr(&quot;&amp;Password&quot;));
    pwdlineEdit = new QLineEdit;
    pwdlineEdit-&gt;setEchoMode(QLineEdit::Password);
    pwdlabel-&gt;setBuddy(pwdlineEdit);
    infolabel = new QLabel(tr(&quot;Please enter your username and password&quot;));
    connectButton = new QPushButton(tr(&quot;&amp;Login&quot;));
    connectButton-&gt;setEnabled(false);
    connectButton-&gt;setDefault(true);
    closeButton = new QPushButton(tr(&quot;&amp;Cancel&quot;));

    //connect components
    connect(userlineEdit,SIGNAL(textChanged(QString)),this,SLOT(on_LineEdit_textchanged()));
    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    connect(connectButton, SIGNAL(clicked()), this, SLOT(try_to_connect()));

    //create Layouts
    QVBoxLayout* topMidLayout = new QVBoxLayout;
    topMidLayout-&gt;addWidget(infolabel);
    topMidLayout-&gt;addStretch();

    QVBoxLayout* botLeftLayout = new QVBoxLayout;
    botLeftLayout-&gt;addWidget(userlineEdit);
    botLeftLayout-&gt;addWidget(userlabel);

    QVBoxLayout* midLeftLayout = new QVBoxLayout;
    midLeftLayout-&gt;addLayout(botLeftLayout);
    midLeftLayout-&gt;addStretch();
    midLeftLayout-&gt;addWidget(connectButton);

    QVBoxLayout* botRightLayout = new QVBoxLayout;
    botRightLayout-&gt;addWidget(pwdlineEdit);
    botRightLayout-&gt;addWidget(pwdlabel);

    QVBoxLayout* midRightLayout = new QVBoxLayout;
    midRightLayout-&gt;addLayout(botRightLayout);
    midRightLayout-&gt;addStretch();
    midRightLayout-&gt;addWidget(closeButton);

    QHBoxLayout* midLayout = new QHBoxLayout;
    midLayout-&gt;addLayout(midLeftLayout);
    midLayout-&gt;addLayout(midRightLayout);

    QVBoxLayout* mainLayout = new QVBoxLayout;
    mainLayout-&gt;addLayout(topMidLayout);
    mainLayout-&gt;addLayout(midLayout);

    setLayout(mainLayout);
    setWindowTitle(tr(&quot;Login&quot;));
    setFixedHeight(sizeHint().height());
    setFixedWidth(sizeHint().width());
    setTabOrder(userlineEdit, pwdlineEdit);
    setTabOrder(connectButton, closeButton);
}

bool LoginDialog::try_to_connect()
{   //create databaseconnection
    QSqlDatabase db = QSqlDatabase::addDatabase(&quot;QMYSQL&quot;);
    db.setHostName(&quot;localhost&quot;);
    db.setDatabaseName(&quot;Datenbankname&quot;);
    db.setUserName(userlineEdit-&gt;text());
    db.setPassword(pwdlineEdit-&gt;text());
    if (!db.open())
    {
        infolabel-&gt;setText(&quot;&lt;font color='red'&gt;Error connecting to db&lt;/font&gt;&quot;);
        QMessageBox::critical(0, QObject::tr(&quot;Database Error&quot;),db.lastError().text());
        return false;
    }
    infolabel-&gt;setText(&quot;&lt;font color='green'&gt;Database connected successfully&lt;/font&gt;&quot;);
    QMessageBox::information(this, tr(&quot;Database connected&quot;),tr(&quot;Database connected successfully&quot;));
    return true;
}

void LoginDialog::on_LineEdit_textchanged(){
    if (userlineEdit-&gt;text() != &quot;&quot;)
        connectButton-&gt;setEnabled(true);
    else
        connectButton-&gt;setEnabled(false);
    //return 0;
}
</code></pre>
<p>Mein Aufruf des Dialogs sieht wie folgt aus:</p>
<pre><code class="language-cpp">//mainwindow.h
class LoginDialog;
private slots:
    bool login();

//mainwindow.cpp
bool MainWindow::login()
{
    if (!loginDialog)
    {
        loginDialog = new LoginDialog(this);
    }
    loginDialog-&gt;exec();
}
</code></pre>
<p>So jetzt zu den Fragen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
1. Ist es möglich den Dialog aufzurufen, bevor das Hauptfenster erstellt wird und nur wenn die Verbindung funktionier hat das Hauptfenster überhaupt erst zu erstellen? Also mein try_to_connect() slot das Hauptfenster erstellen lasse, bzw einen Parameter an die main sendet und diese dann das Fenster erstellt.<br />
2. Wie übergebe ich meine Verbindungsparameter bzw das QSqlDatabase Objekt an mein Hauptfenster? Habe aus Beispielen und der Doku mehrere Varianten erfolglos getestet^^</p>
<p>Vielen Dank für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306962/qt-logindialog-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 12:02:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306962.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Aug 2012 17:42:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Qt] Logindialog aufrufen on Sun, 12 Aug 2012 17:42:10 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe mich die letzten Tage etwas in Qt eingelesen und will ein paar Testprojekte erstellen.</p>
<p>Bei einem Dialog der für das Einlogen in eine MySQL Datenbank zuständig ist habe ich aber ein kleines Problem. (Habe alles ohne Designer/Creator erstellt.)<br />
hier die logindialog.h</p>
<pre><code class="language-cpp">#ifndef LOGINIALOG_H
#define LOGINDIALOG_H

#include &lt;QDialog&gt;
class QLabel;
class QLineEdit;
class QPushButton;

class LoginDialog : public QDialog
{
    Q_OBJECT //macro das für dialoge mit eigenen objecten nötig ist

public:
    LoginDialog(QWidget *parent = 0);  //constructor which tells the parent. default is no parent

private slots:
    bool try_to_connect();
    void on_LineEdit_textchanged();

private:
//elements that are on the form
    QLabel *userlabel;
    QLabel *pwdlabel;
    QLabel *infolabel;
    QPushButton *connectButton;
    QPushButton *closeButton;

public:
    QLineEdit *userlineEdit;
    QLineEdit *pwdlineEdit;
};

#endif
</code></pre>
<p>und hier die logindialog.cpp dazu</p>
<pre><code class="language-cpp">#include &lt;QtGui&gt;
#include &lt;QtSql&gt;

#include &quot;logindialog.h&quot;

LoginDialog::LoginDialog(QWidget *parent)
    : QDialog(parent)
{
    //initialize components
    userlabel = new QLabel(tr(&quot;&amp;Username&quot;));
    userlineEdit = new QLineEdit;
    userlabel-&gt;setBuddy(userlineEdit);
    pwdlabel = new QLabel(tr(&quot;&amp;Password&quot;));
    pwdlineEdit = new QLineEdit;
    pwdlineEdit-&gt;setEchoMode(QLineEdit::Password);
    pwdlabel-&gt;setBuddy(pwdlineEdit);
    infolabel = new QLabel(tr(&quot;Please enter your username and password&quot;));
    connectButton = new QPushButton(tr(&quot;&amp;Login&quot;));
    connectButton-&gt;setEnabled(false);
    connectButton-&gt;setDefault(true);
    closeButton = new QPushButton(tr(&quot;&amp;Cancel&quot;));

    //connect components
    connect(userlineEdit,SIGNAL(textChanged(QString)),this,SLOT(on_LineEdit_textchanged()));
    connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
    connect(connectButton, SIGNAL(clicked()), this, SLOT(try_to_connect()));

    //create Layouts
    QVBoxLayout* topMidLayout = new QVBoxLayout;
    topMidLayout-&gt;addWidget(infolabel);
    topMidLayout-&gt;addStretch();

    QVBoxLayout* botLeftLayout = new QVBoxLayout;
    botLeftLayout-&gt;addWidget(userlineEdit);
    botLeftLayout-&gt;addWidget(userlabel);

    QVBoxLayout* midLeftLayout = new QVBoxLayout;
    midLeftLayout-&gt;addLayout(botLeftLayout);
    midLeftLayout-&gt;addStretch();
    midLeftLayout-&gt;addWidget(connectButton);

    QVBoxLayout* botRightLayout = new QVBoxLayout;
    botRightLayout-&gt;addWidget(pwdlineEdit);
    botRightLayout-&gt;addWidget(pwdlabel);

    QVBoxLayout* midRightLayout = new QVBoxLayout;
    midRightLayout-&gt;addLayout(botRightLayout);
    midRightLayout-&gt;addStretch();
    midRightLayout-&gt;addWidget(closeButton);

    QHBoxLayout* midLayout = new QHBoxLayout;
    midLayout-&gt;addLayout(midLeftLayout);
    midLayout-&gt;addLayout(midRightLayout);

    QVBoxLayout* mainLayout = new QVBoxLayout;
    mainLayout-&gt;addLayout(topMidLayout);
    mainLayout-&gt;addLayout(midLayout);

    setLayout(mainLayout);
    setWindowTitle(tr(&quot;Login&quot;));
    setFixedHeight(sizeHint().height());
    setFixedWidth(sizeHint().width());
    setTabOrder(userlineEdit, pwdlineEdit);
    setTabOrder(connectButton, closeButton);
}

bool LoginDialog::try_to_connect()
{   //create databaseconnection
    QSqlDatabase db = QSqlDatabase::addDatabase(&quot;QMYSQL&quot;);
    db.setHostName(&quot;localhost&quot;);
    db.setDatabaseName(&quot;Datenbankname&quot;);
    db.setUserName(userlineEdit-&gt;text());
    db.setPassword(pwdlineEdit-&gt;text());
    if (!db.open())
    {
        infolabel-&gt;setText(&quot;&lt;font color='red'&gt;Error connecting to db&lt;/font&gt;&quot;);
        QMessageBox::critical(0, QObject::tr(&quot;Database Error&quot;),db.lastError().text());
        return false;
    }
    infolabel-&gt;setText(&quot;&lt;font color='green'&gt;Database connected successfully&lt;/font&gt;&quot;);
    QMessageBox::information(this, tr(&quot;Database connected&quot;),tr(&quot;Database connected successfully&quot;));
    return true;
}

void LoginDialog::on_LineEdit_textchanged(){
    if (userlineEdit-&gt;text() != &quot;&quot;)
        connectButton-&gt;setEnabled(true);
    else
        connectButton-&gt;setEnabled(false);
    //return 0;
}
</code></pre>
<p>Mein Aufruf des Dialogs sieht wie folgt aus:</p>
<pre><code class="language-cpp">//mainwindow.h
class LoginDialog;
private slots:
    bool login();

//mainwindow.cpp
bool MainWindow::login()
{
    if (!loginDialog)
    {
        loginDialog = new LoginDialog(this);
    }
    loginDialog-&gt;exec();
}
</code></pre>
<p>So jetzt zu den Fragen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
1. Ist es möglich den Dialog aufzurufen, bevor das Hauptfenster erstellt wird und nur wenn die Verbindung funktionier hat das Hauptfenster überhaupt erst zu erstellen? Also mein try_to_connect() slot das Hauptfenster erstellen lasse, bzw einen Parameter an die main sendet und diese dann das Fenster erstellt.<br />
2. Wie übergebe ich meine Verbindungsparameter bzw das QSqlDatabase Objekt an mein Hauptfenster? Habe aus Beispielen und der Doku mehrere Varianten erfolglos getestet^^</p>
<p>Vielen Dank für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241235</guid><dc:creator><![CDATA[Sherlock]]></dc:creator><pubDate>Sun, 12 Aug 2012 17:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to [Qt] Logindialog aufrufen on Sun, 12 Aug 2012 21:38:41 GMT]]></title><description><![CDATA[<p>Das mit der Parameterübergabe habe ich gelöst.<br />
Habe einen das ganze über zusätzliche Signals und Slots gelöst. Jetzt bleibt nurnoch das mit dem Hauptfenster erst anzeigen, wenn mein Parameterübergabeslot aufgerufen wird.</p>
<pre><code class="language-cpp">MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui-&gt;setupUi(this);
    connect(ui-&gt;connectbutton,SIGNAL(clicked()),this,SLOT(login()));
}

bool MainWindow::login() //login bei buttonclick. soll aber eigentlich im construktor aufgerufen werden und das hauptfenster nicht angezeigt werden
{
    loginDialog = new LoginDialog(this);
    connect (loginDialog,
             SIGNAL(connection_success(const QString&amp;,const QString&amp;)),
             this,
             SLOT(connect_db(const QString&amp;,const QString&amp;)));

    loginDialog-&gt;exec();
    delete loginDialog;
    return true;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::connect_db(const QString&amp; user, const QString&amp; pwd)//slot für parameterübergabe
{
    //QMessageBox::critical(0, QObject::tr(&quot;verbindung wird hergestellt&quot;),user);
    //dummy um zu prüfen ob die übergabe funktioniert
    ui-&gt;userlabel-&gt;setText(user);
    ui-&gt;pwdlabel-&gt;setText(pwd);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2241302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241302</guid><dc:creator><![CDATA[Sherlock]]></dc:creator><pubDate>Sun, 12 Aug 2012 21:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to [Qt] Logindialog aufrufen on Mon, 13 Aug 2012 14:04:53 GMT]]></title><description><![CDATA[<p>Hat sich erledigt, habe das Problem gefunden.<br />
Hatte vergessen aus der main.cpp das</p>
<pre><code class="language-cpp">Mainwindow.show();
</code></pre>
<p>raus zu nehmen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2241511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2241511</guid><dc:creator><![CDATA[Sherlock]]></dc:creator><pubDate>Mon, 13 Aug 2012 14:04:53 GMT</pubDate></item></channel></rss>