Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法从其他头文件获取QString数据_C++_Qt_Qt Creator - Fatal编程技术网

C++ 无法从其他头文件获取QString数据

C++ 无法从其他头文件获取QString数据,c++,qt,qt-creator,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(u

我有一个登录窗口,用户在其中输入一些文本

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();
}
前缀、站点、数据库名和用户在login.h中定义为QString login.h:

\ifndef登录\u H
#定义登录名
#包括
名称空间用户界面{
类登录;
}
类登录名:publicqdialog
{
Q_对象
公众:
显式登录(QWidget*parent=0);
void-rOpen();
QString前缀;
QString位点;
QString数据库名;
QString用户;
~login();
我正在尝试从mainwindow.cpp访问前缀、站点、数据库名和用户

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();
\ifndef主窗口
#定义主窗口
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
void rPopulate();
QPushButton*按钮;
登录*日志;
~main窗口();
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;
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“login.h”
#包括“newbooking.h”
#包括
//一些代码
login*log=新登录;
QString table_schema=log->prefix+log->dbname;

但是,log->prefix和log->dbname都是空的。ui->u prefix->text()和ui->u database->text()中都有默认文本,所以它们不应该是空的。

您可能试图访问
mainwindow::log
mainwindow
的成员日志。您可能在此函数上调用
rLogin

但是,由于正在创建具有默认值的新对象,因此将获得空值

login *log = new login;

这一行是我假设的问题的一部分。在您向我们展示如何调用
rLogin
之前,我们不会知道更多,但您希望从调用它的同一个对象进行检查。

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

登录

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

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

然后,你可以从任何你想要的文件中调用它们。愚蠢的我。

你的意思是访问
主窗口成员的
日志
?当你创建
新登录时,它们当然会有默认值,即空值。这些值是从ui->\u前缀等复制的。在rLogin中,我看不到那种方法called.@KarthikT不,我试图访问login.h FrankOsterfeld中的qstring,我包括了整个login.cpp文件now@CppandQtBeginner也许您需要花一些时间阅读面向对象编程?字符串不在文件中,而是在
登录的特定对象中。您需要从该文件访问它们object@CppandQtBeGnIL:我同意Karthik,你应该了解更多关于面向对象的编程和C++。你在主窗口类中创建了一个新的登录对象,并且在登录类中创建了一个新的主窗口对象。通常你只使用一个主窗口,它是在主函数中创建的。Login。CPP/UI/H是加载的第一个文件,R登录被称为WHO。en单击登录按钮。(我更新了Login.cpp以包含整个文件)您创建了一个新的登录对象,然后立即访问其前缀成员。此时,什么都没有发生,对话框甚至不可见。您必须等待rLogin()被触发,然后继续(例如,通过连接到信号loggedIn()来继续)添加到登录并在rLogin末尾发出)
#include ...
QString example; //this
login::login(QWidget *parent) :