Ir ao conteúdo
  • Cadastre-se

C++ Como acessar resultado da variavel de uma classe


Posts recomendados

Bom dia!

 

 

Eu to com um programa no QTCreator onde eu coloquei a conexão com o db na classe de construção do objeto. Igual a imagem abaixo:


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("nomedadb");
    db.setUserName("user");
    db.setPassword("senha");
    bool ok = db.open();
}

 

Só que eu preciso pegar a informação da variavel bool ok = db.open(); para saber se a conexão com o db foi realizada. Só que eu quero acessar essa variavel de outra função. Mas eu não sei como.

 

 

 

Obrigado desde já

 

Link para o comentário
Compartilhar em outros sites

essa variável "ok" tem que ser uma variável de classe, publica ou privada. Se for privada, use uma função para ler o valor.

 

class MainWindow : public QMainWindow
{
    private:
        bool ok;
    public:
        bool IsOk() {return ok;}
};
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("nomedadb");
    db.setUserName("user");
    db.setPassword("senha");
    ok = db.open();
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá!

 

Suspeito que não queira salvar apenas esse modesto boolean ok...

Uma variável dessas existe apenas dentro do bloco mais interno {}. 

Imagino que queira a conexão com o banco disponível em várias partes do programa e não uma variável indicando que esteve disponível em algum canto, então talvez uma classe estática com os parâmetros de conexão seja a solução, a menos que pretenda ter várias instâncias de conexão disponíveis durante o programa

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

9 horas atrás, Flávio Pedroza disse:

essa variável "ok" tem que ser uma variável de classe, publica ou privada. Se for privada, use uma função para ler o valor.

 


class MainWindow : public QMainWindow
{
    private:
        bool ok;
    public:
        bool IsOk() {return ok;}
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("nomedadb");
    db.setUserName("user");
    db.setPassword("senha");
    ok = db.open();
}

 

eu não entendo :s... Eu posso manter a conexão com o db dentro do constructor?

adicionado 1 minuto depois
6 horas atrás, arfneto disse:

Olá!

 

Suspeito que não queira salvar apenas esse modesto boolean ok...

Uma variável dessas existe apenas dentro do bloco mais interno {}. 

Imagino que queira a conexão com o banco disponível em várias partes do programa e não uma variável indicando que esteve disponível em algum canto, então talvez uma classe estática com os parâmetros de conexão seja a solução, a menos que pretenda ter várias instâncias de conexão disponíveis durante o programa

pois é, eu quero utilizar a conexão com o banco de dados durante o programa todo. Mas sem ter que precisar ficar iniciando uma nova sessão para cada signal que eu der. 

Link para o comentário
Compartilhar em outros sites

@Reberth Siqueira

 

A classe que controla sua janela principal parece ser o lugar ideal pra hospedar uma instância da conexão com o banco de dados e assim você vai poder acessar de qualquer canto...

Esse objeto --- classe em C++ afinal --- db declarado na janela que é parent de todas deve estar disponível em ... todas. E então você pode escrever por exemplo

if(MainWindow.db.open())
{
	...
}

... em qualquer janela que tenha acesso a MainWwindow

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

Boa noite @arfneto, ainda não sei como implantar esse código para obter tal resultado. Talvez seja pela minha falta de conhecimento em C++ e estrutura de dados... Mas vou ver umas video aula de criação de classe em C++ e depois tento novamente...

 

 

Eu to com uma dúvida parecida com a desse tópico... Mas é voltada para lingugagem C...

 

Eu to fazendo um trabalho da faculdade, é um jogo de batalha naval escrito em C e to com problema:

 

         Eu decidi estrutura-lo em tres funções: 

                 - criar(); //cria o tabuleiro (matriz) e o arsenal (porta-aviao,navio-tanque,conta-torpedeiro e submarino) do JOGADOR1 e JOGADOR2 (struct);

                 - posicionar(); //Na função posicionar(); cada jogador vai escolher as posições do tabuleiro para posicionar cada peca;

                 - jogar(); //Por fim entra a função jogar(); onde, cada jogador vai tentar adivinhar a posicao de cada peca inimiga;

 

Eu vou ter que acessar as informações do tabuleiro e do arsenal nas últimas duas funções. Só da pra fazer isso com ponteiros?

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Reberth Siqueira disse:

 

Boa noite @arfneto, ainda não sei como implantar esse código para obter tal resultado. Talvez seja pela minha falta de conhecimento em C++ e estrutura de dados... Mas vou ver umas video aula de criação de classe em C++ e depois tento novamente...

 

 

Eu to com uma dúvida parecida com a desse tópico... Mas é voltada para lingugagem C...

 

Eu to fazendo um trabalho da faculdade, é um jogo de batalha naval escrito em C e to com problema:

 

         Eu decidi estrutura-lo em tres funções: 

                 - criar(); //cria o tabuleiro (matriz) e o arsenal (porta-aviao,navio-tanque,conta-torpedeiro e submarino) do JOGADOR1 e JOGADOR2 (struct);

                 - posicionar(); //Na função posicionar(); cada jogador vai escolher as posições do tabuleiro para posicionar cada peca;

                 - jogar(); //Por fim entra a função jogar(); onde, cada jogador vai tentar adivinhar a posicao de cada peca inimiga;

 

Eu vou ter que acessar as informações do tabuleiro e do arsenal nas últimas duas funções. Só da pra fazer isso com ponteiros?

 

Em relação ao jogo em C talvez devesse abrir outro tópico, certo?

Você vai precisar de alguma estrutura de dados para implementar o jogo e em c++ teria claro mais suporte. Mas se vai implementar o jogo em C e vai ter uma estrutura com o tabuleiro e outras para acompanhar o jogo e os tamanhos já estão definidos não precisa de alocação dinâmica. Como vai usar um tabuleiro, que é mais fácil de ver como uma estrutura 2D, então pode declarar tudo com tamanho fixo.

Um vetor em C é um ponteiro de qualquer forma, então não sei ao certo o que quer evitar... Os asteriscos?

adicionado 1 minuto depois
1 hora atrás, Reberth Siqueira disse:

image.thumb.png.8026083c564218c55f5bd30b92f530a9.png

 

Não estou entendendo porque está dando esse erro t.t

 

O banco de dados já existe? testou com o próprio banco? 

O Qt está preparado para acessar esse banco? viu no script de configuração do Qt se o driver está habilitado?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!