无法从另一个头文件中获取QString数据

时间:2013-06-27 04:44:04

标签: c++ qt qt-creator

我有一个登录窗口,用户可以在其中输入一些文字。

login.cpp:

#include "login.h"
#include "ui_login.h"
#include "mainwindow.h"

login::login(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::login)
{
    ui->setupUi(this);
    this->setFixedSize(320,212);
    connect(ui->_login, SIGNAL(clicked()), this, SLOT(rLogin()));
    connect(ui->_close, SIGNAL(clicked()), this, SLOT(rClose()));
}

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

void login::rLogin()
{
    prefix = ui->_prefix->text();
    site = ui->_site->text();
    dbname = ui->_database->text();
    user = ui->_username->text();
    QString pass = ui->_password->text();
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName(site);
    db.setDatabaseName(prefix + dbname);
    db.setUserName(prefix + user);
    db.setPassword(pass);
    bool logged = db.open();
    if (logged) {
        rOpen();
    } else {
        int warning = QMessageBox::warning(this, tr("Hostel ERP Error"),
                                           tr("Could not connect to database.\n"
                                              "Please check your inputs."),
                                           QMessageBox::Ok);
    }
}

void login::rOpen()
{
    mainwindow* openwindow = new mainwindow();
    openwindow->show();
    this->close();
}

void login::rClose()
{
    this->close();
}

前缀,站点,dbname和用户在login.h中定义为QString login.h:

#ifndef LOGIN_H
#define LOGIN_H

#include <QDialog>

namespace Ui {
class login;
}

class login : public QDialog
{
    Q_OBJECT

public:
    explicit login(QWidget *parent = 0);
    void rOpen();
    QString prefix;
    QString site;
    QString dbname;
    QString user;
    ~login();

我正在尝试从mainwindow.cpp

访问前缀,网站,dbname和用户

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMessageBox>
#include <QPushButton>
#include <QAction>
#include <QMainWindow>
#include <QSqlRecord>
#include <login.h>

namespace Ui {
class mainwindow;
}

class mainwindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit mainwindow(QWidget *parent = 0);
    void rPopulate();
    QPushButton *button;
    login * log;
    ~mainwindow();

mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "login.h"
#include "newbooking.h"
#include <qaction.h>
//somecode
login *log = new login;
QString table_schema = log->prefix + log->dbname;

然而log-&gt;前缀和log-&gt; dbname都是空的。 ui->; _prefix-&gt; text()中有默认文本;和ui-&gt; _database-&gt; text();所以他们不应该是空的。

2 个答案:

答案 0 :(得分:0)

您可能正在尝试访问mainwindow::log,即mainwindow成员的日志。你可能在这个函数上调用rLogin

但是,您将获得空值,因为您正在创建一个具有默认值的新对象。

login *log = new login;

这一行是我假设的问题的一部分。在您向我们展示如何拨打rLogin之前,我们不会了解更多信息,但您想要从您调用它的同一个对象进行检查。

答案 1 :(得分:0)

需要在#include“mainwindow.h”和login :: login(QWidget * parent)之间的login.h顶部将QString声明为全局变量,然后在login.cpp中定义QStrings。

例如。 login.h

#include ...
extern QString site; //this
login::login(QWidget *parent) :

login.cpp

#include ...
QString example; //this
login::login(QWidget *parent) :

之后,您可以从任何文件中调用它们。傻我。