QT - Problema con asignacion y lectura de variables

 
Vista:
sin imagen de perfil

Problema con asignacion y lectura de variables

Publicado por Janjio (3 intervenciones) el 16/03/2017 19:16:30
Hola, estoy empezando con Qt Creator 4.2.0 y en mi primer programa tengo un problema que no alcanzo a entender. Asi que de nuevo solicito vuestra ayuda,

El código de mi MainWindow.cpp es el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "frmtiempos1.h"
 
int MainWindow::estado_marcha = 0;// Inicializo la varialble con valor 0=False (Declarada de MainWindow.h)
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::abrirFormTiempos(){
    FrmTiempos1 *frmtiempos1=new FrmTiempos1();
    frmtiempos1->show();
}
 
void MainWindow::marcha(){
    estado_marcha = 1;
    if (estado_marcha == 1){
        ui->label1->setText("Cambio MARCHA a 0");
        ui->BT_Marcha->setIcon(QIcon(":/img/play_off_100x100.png")); //Cambio icono a rojo
        estado_marcha = 0;//Pongo en PARO
    }
    if (estado_marcha == 0){
        ui->label1->setText("Cambio MARCHA a 1");
        ui->BT_Marcha->setIcon(QIcon(":/img/play_on_100x100.png")); //Cambio icono a verde
        estado_marcha = 1;//Pongo en MARCHA
 
    }
 
}

Por medio de Slot-Señal al pulsar el toolbutton BT_Marcha voy a la función marcha()
El problema es que la variable estado_marcha siempre vale 0, Incluso forzando su valor a 1 al inicio de la función. En principio la declaré como boolean con el mismo resultado.
¿Por que no cambia de valor? Haga lo que haga, al hacer click en el boton siempre se va al if(estado_marcha == o)

Donde estoy equivocándome?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Problema con asignacion y lectura de variables

Publicado por juanki (102 intervenciones) el 16/03/2017 20:19:32
Hola

¿La línea 5 no te da error? La forma de inicializar la variable de clase sería:

1
2
3
4
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    estado_marcha(0)

Si te compila y no te da error, es posible que esa que defines ahí te cree conflicto con la que declaras en el .h y de ahí el error.

Si solo vas a usar esa variable para ver si es verdadero o falso, ¿por que no usas bool?

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con asignacion y lectura de variables

Publicado por Janjio (3 intervenciones) el 16/03/2017 21:21:14
No me da error. A ver si me aclaro, el código que me pones para inicializar la variable iría en el MainWindow.cpp en la linea 5 no??

Mi MainWindow.h es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    static int estado_marcha;//Declaro la variable
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
public slots:
    void abrirFormTiempos();
    void marcha();
 
};
 
#endif // MAINWINDOW_H

Para empezar parece que no me aclaro todavía con la forma de codificar en C++ con Qt
Corrigeme:
-La variable se declara en el MainWindow.h como hago en la linea 15.
-Luego se inicializa dándole valor en el MainWindow.cpp (Si entendí bien con el código que me adjuntas)

Y si, en principio la declaré como bool. La cambié a int por probar.

Muchas gracias por tu respuesta, tiempo y paciencia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Problema con asignacion y lectura de variables

Publicado por juanki (102 intervenciones) el 16/03/2017 23:21:07
Hola

Para empezar parece que no me aclaro todavía con la forma de codificar en C++ con Qt
-
Pues Qt se programa en C++, todas las reglas que aplican a C++ aplican en Qt, lo único que Qt te provee de un sin fin de clases para todo, pero es C++, como cualquier otro programa en C++.

-La variable se declara en el MainWindow.h como hago en la linea 15.
-
Vale, sí, la has declarado static, por lo que se inicializa como pusiste al principio. ¿No la estarás modificando en otra parte? ¿Por que la haces static? Tal como la estás usando no es necesario.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 96
Oro
Ha mantenido su posición en QT (en relación al último mes)
Gráfica de QT

Problema con asignacion y lectura de variables

Publicado por juanki (102 intervenciones) el 17/03/2017 08:25:34
Hola

Vale, el fallo lo tienes con los if, en el primero comparas con 1, pero dentro pones la variable a 0, por lo que el segundo se ejecuta también. Y es tan rápido que no ves los mensajes.

Tienes que usar else if o switch.


Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problema con asignacion y lectura de variables

Publicado por Janjio (3 intervenciones) el 19/03/2017 21:05:37
Muchisimas gracias juanki, exactamente ese era mi error. Tengo que hacermelo mirar porque no es la primera vez que me pasa.

Lo de declarar la variable como static es porque esa variable la uso desde varias formularios y partes del programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con asignacion y lectura de variables

Publicado por Carlos A Arronte (2 intervenciones) el 11/04/2017 17:36:24
Prueba declarando la inicializacion de la variable estado_marcha en el constructor de la clase (siempre debajo de ui->setupUi(this))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar