【问题标题】:Qt C++ class does not name a typeQt C++ 类没有命名类型
【发布时间】:2015-11-28 17:43:40
【问题描述】:

我正在尝试将 ComboBox 放入查询并将结果放入 QtableView。

我的查询有效,表格视图显示结果,我的组合框接收第一列元素但是...

当我尝试对 on_comboBox_pedido_currentIndexChanged 进行新查询时,我的查询结果始终为空。

我试图将我的“Login teste”声明类公开并显示“'Login' 没有命名类型”

这是我的 pedidos.h 。我试着在这里创建一个公共测试!!!

#ifndef PEDIDOS_H
#define PEDIDOS_H

#include <QDialog>
#include <QTableView>
#include <QtWidgets>

namespace Ui {
class Pedidos;
}

class Pedidos : public QDialog
{
    Q_OBJECT

public:

    Login teste;  // not working - "does not name a type" error

    explicit Pedidos(QWidget *parent = 0);
    ~Pedidos();

private slots:
    void on_pushButton_load_pedidos_clicked();

    void on_comboBox_pedido_currentIndexChanged(const QString &arg1);

private:
    Ui::Pedidos *ui;
};

#endif // PEDIDOS_H

这是我的 pedidos.cpp

#include "login.h"
#include "pedidos.h"
#include "ui_pedidos.h"

Pedidos::Pedidos(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Pedidos)
{
    ui->setupUi(this);

    Login conn;

    if(!conn.connOpen())
       ui->label_pedidos_conn->setText("Falha na conexão ao Database");
    else{
       ui->label_pedidos_conn->setText("Database Ok");
       conn.connClose();
     }

}

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

void Pedidos::on_pushButton_load_pedidos_clicked()
{
    Login conn;
    QSqlQueryModel *modal=new QSqlQueryModel();

    QSqlQuery *qry=new QSqlQuery(conn.mydb);

    qry->prepare("SELECT pedido.id_pedido, usuarios.nome_user, endereco.bairro, \
                         pedido.id_user, pedido.data   FROM pedido \
                  INNER JOIN usuarios ON pedido.id_user=usuarios.id_user \
                  INNER JOIN endereco ON pedido.id_endereco=endereco.id_endereco \
                  WHERE pedido.status=0");

            qry->exec();

    qDebug() << qry->lastError().text();

    modal->setQuery(*qry);

    modal->setHeaderData(0, Qt::Horizontal, "Pedido");
    modal->setHeaderData(1, Qt::Horizontal, "Usuário");
    modal->setHeaderData(2, Qt::Horizontal, "Bairro");

    ui->tableView_pedidos->setModel(modal);

    ui->comboBox_pedido->setModel(modal);  // My ComboBox here!

    ui->tableView_pedidos->resizeRowsToContents();
    ui->tableView_pedidos->resizeColumnsToContents();

   ui->tableView_pedidos->setColumnHidden(3, true);
   ui->tableView_pedidos->setColumnHidden(4, true);

    while(qry->next()){

        QString usuario = qry->value(0).toString();
        qDebug() << "id:" << usuario;
    }

    //qDebug() << (modal->rowCount());

}

void Pedidos::on_comboBox_pedido_currentIndexChanged(const QString &arg1)
{
    QString id_pedido=ui->comboBox_pedido->currentText();
    qDebug() << id_pedido;



       QSqlQueryModel *modal2=new QSqlQueryModel();

//works until here...if uncomment any line from here nok

        Login meudb;  // this line uncommented, query on pushbutton is not working ( blank )
        //QSqlQuery *qry=new QSqlQuery(meudb.mydb);
        //meudb.connClose();


}

如果我注释“登录meudb”行,查询结果就ok了。

所以我尝试创建一个全局“Login teste”来替换我本地的“Login conn”。

我在这里阅读了很多文章。

提前致谢

【问题讨论】:

  • 您的 pedidos.h 文件中缺少#include "login.h"
  • 这是我的第一个选择...不起作用。但是在我的 pedidos.cpp 中,在 pedidos.h 之前有一个 login.h。

标签: c++ qt class global-variables


【解决方案1】:

在你的文件 pedidos.h 中试试这个:

#ifndef PEDIDOS_H
#define PEDIDOS_H

#include <QDialog>
#include <QTableView>
#include <QtWidgets>

class Login;
...

【讨论】:

  • 我实现了你的提示。编译器显示:“字段'teste'的类型'Login'不完整”。
  • 让我更好地解释我的问题。我正在尝试使用“登录”全局类来解决我在 pedidos.cpp 内的组合框中的问题。 pedidos.pcc 中的所有方法都可以识别“登录”类,但是当我在组合框方法中定义“登录”时,我的最后一个查询是完全空白的。我不明白为什么。
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多