Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. ¿Cómo pasar Arreglos de un Form a otro?
Forum Updated to NodeBB v4.3 + New Features

¿Cómo pasar Arreglos de un Form a otro?

Scheduled Pinned Locked Moved Solved Spanish
17 Posts 2 Posters 7.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • juankiJ Offline
    juankiJ Offline
    juanki
    Moderators
    wrote on last edited by juanki
    #4

    NO veo ninguna imagen, me sale un link, pero cuando le doy me dice "page not found".

    POR FAVOR NO subas imágenes, copia el trozo de código que creas conveniente. Subir una imagen es más complicado para tí, tienes que sacar la captura, editarla, subirla a un servidor y copiar el link. con el texto TAN SOLO TIENES QUE HACER COPY & PASTE.

    Y, por si eso fuera poco, para el que quiere ayudarte es mucho más complicado, si quiero probar tu código y lo has subido como texto, tan solo tengo que hacer copy & paste, en cambio, si subes una imagen, ME OBLIGAS A TECLEARLO ENTERO, cosa que, personalmente, no voy a hacer.

    close() y show() sí sé lo que hacen, lo que no sé es porqué los ejecutas en ese orden, como te dije, si le pasas un array y destruyes el form puede que éste se destruya también y por eso te da error al acceder a los datos (es solo una suposición sin haber visto nada de código), en cambio, si destruyes el primer formulario después de destruir el segundo, no tendrías ese problema.

    Un saludo

    Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
    Procura escribir correctamente y sin faltas de ortografía.

    Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

    E 1 Reply Last reply
    0
    • juankiJ juanki

      NO veo ninguna imagen, me sale un link, pero cuando le doy me dice "page not found".

      POR FAVOR NO subas imágenes, copia el trozo de código que creas conveniente. Subir una imagen es más complicado para tí, tienes que sacar la captura, editarla, subirla a un servidor y copiar el link. con el texto TAN SOLO TIENES QUE HACER COPY & PASTE.

      Y, por si eso fuera poco, para el que quiere ayudarte es mucho más complicado, si quiero probar tu código y lo has subido como texto, tan solo tengo que hacer copy & paste, en cambio, si subes una imagen, ME OBLIGAS A TECLEARLO ENTERO, cosa que, personalmente, no voy a hacer.

      close() y show() sí sé lo que hacen, lo que no sé es porqué los ejecutas en ese orden, como te dije, si le pasas un array y destruyes el form puede que éste se destruya también y por eso te da error al acceder a los datos (es solo una suposición sin haber visto nada de código), en cambio, si destruyes el primer formulario después de destruir el segundo, no tendrías ese problema.

      Un saludo

      E Offline
      E Offline
      Eduardo12l
      wrote on last edited by
      #5

      @juanki ok, ahi van los trozos

      Fragmento del Dialog1.cpp:```
      //your code here

      
      void Dialog1::on_pushButton_clicked()
      {
          cont = cont + 1;
          numero = (ui->comboBox->currentText()).toInt();
          curso = ui->comboBox_2->currentText();
          Dialog2 *v = new Dialog2(this, curso, numero);
          close();
          v->show();
      }
      

      Fragmento completo del Dialog1.h
      //your code here

      
      #ifndef DIALOG1_H
      #define DIALOG1_H
      
      #include <QDialog>
      #include <dialog2.h>
      
      namespace Ui {
      class Dialog1;
      }
      
      class Dialog1 : public QDialog
      {
          Q_OBJECT
      
      public:
      
          explicit Dialog1(QWidget *parent = 0);
          Dialog1(QWidget *parent = 0, int var = 0);
          ~Dialog1();
          QString curso;
          int numero;
          int cont;
      private slots:
          void on_pushButton_clicked();
      
      private:
          int var;
          Ui::Dialog1 *ui;
      };
      
      #endif // DIALOG1_H
      

      Fragmento de la parte Inicial del Dialog2.cpp
      //your code here

      
      
      Dialog2::Dialog2(QWidget *parent, const QString curso, const int numero):
          QDialog(parent),
          ui(new Ui::Dialog2) , curso(curso), numero(numero)
      {
      ...
      
      
      

      Fragmento del Dialog2.h
      //your code here

      #ifndef DIALOG2_H
      #define DIALOG2_H
      
      #include <QDialog>
      #include <dialog3.h>
      #include <dialog1.h>
      
      namespace Ui {
      class Dialog2;
      }
      
      class Dialog2 : public QDialog
      {
          Q_OBJECT
      
      public:
          explicit Dialog2(QWidget *parent = 0);
          Dialog2(QWidget *parent = 0, const QString curso = "", const int numero = 0);
          int n = 0;
          ~Dialog2();
      
      private slots:
          void on_checkBox_clicked();
          void on_checkBox_2_clicked();
          void on_checkBox_3_clicked();
          void on_checkBox_4_clicked();
          void on_checkBox_5_clicked();
          void on_checkBox_6_clicked();
          void on_pushButton_clicked();
          void on_pushButton_2_clicked();
      
      private:
      
          int numero = 0;
          int geg = 0;
          QString curso;
      ...
      

      Los pongo en ese orden porque de la manera inversa me corre extraño, sin embargo, ese no es el problema ya que en otros Forms corre perfectamente tal vez porque solo envio variables con valores y no arreglos .
      //your code here

      1 Reply Last reply
      0
      • juankiJ Offline
        juankiJ Offline
        juanki
        Moderators
        wrote on last edited by
        #6

        Joder, hoy debo estar más tonto que de costumbre, sigo sin ver el array por ninguna parte.

        Por cierto, imagino que sabes que el método close() NO destruye la ventana, solo la oculta, a no ser que uses el flag Qt::WA_DeleteOnClose:

        http://doc.qt.io/qt-5/qwidget.html#close

        Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
        Procura escribir correctamente y sin faltas de ortografía.

        Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

        E 1 Reply Last reply
        0
        • juankiJ juanki

          Joder, hoy debo estar más tonto que de costumbre, sigo sin ver el array por ninguna parte.

          Por cierto, imagino que sabes que el método close() NO destruye la ventana, solo la oculta, a no ser que uses el flag Qt::WA_DeleteOnClose:

          http://doc.qt.io/qt-5/qwidget.html#close

          E Offline
          E Offline
          Eduardo12l
          wrote on last edited by Eduardo12l
          #7

          @juanki Sé lo del Close, pero lo que no se es como convertir cualquiera de las variables (osea en este caso el numero ) a arreglo y qeu funcione

          juankiJ 1 Reply Last reply
          0
          • E Eduardo12l

            @juanki Sé lo del Close, pero lo que no se es como convertir cualquiera de las variables (osea en este caso el numero ) a arreglo y qeu funcione

            juankiJ Offline
            juankiJ Offline
            juanki
            Moderators
            wrote on last edited by
            #8

            Hola

            Y ¿para qué quieres convertir UNA variable en un arreglo? no tiene sentido, tendrías un arreglo de UNA posición. ¿No es mejor tener esa variable y listo?

            Un saludo

            Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
            Procura escribir correctamente y sin faltas de ortografía.

            Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

            E 1 Reply Last reply
            0
            • juankiJ juanki

              Hola

              Y ¿para qué quieres convertir UNA variable en un arreglo? no tiene sentido, tendrías un arreglo de UNA posición. ¿No es mejor tener esa variable y listo?

              Un saludo

              E Offline
              E Offline
              Eduardo12l
              wrote on last edited by
              #9

              @juanki Porque quiero pasar muchos más valores y seria más facil si hubiera un arreglo a estar declarando varias variables con diferentes nombres que van a hacer a mi codigo enorme y horrible.

              1 Reply Last reply
              0
              • juankiJ Offline
                juankiJ Offline
                juanki
                Moderators
                wrote on last edited by
                #10

                Hola

                Meter varias variables en un array puede ser un lio tremendo si dichas variables no guardan relación entre sí:

                	int num = 3;
                	int otra = 5;
                	int otra_mas = 28;
                	
                	int array[3];
                	array[0] = num;
                	array[1] = otra;
                	array[2] = otra_mas;
                

                Ya están en un array, el problema es que tienes que recordar en qué posición pusiste cada una y el lío en el código puede ser tremendo y resultaría en errores difíciles de encontrar.

                Un saludo

                Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                Procura escribir correctamente y sin faltas de ortografía.

                Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                E 1 Reply Last reply
                0
                • juankiJ juanki

                  Hola

                  Meter varias variables en un array puede ser un lio tremendo si dichas variables no guardan relación entre sí:

                  	int num = 3;
                  	int otra = 5;
                  	int otra_mas = 28;
                  	
                  	int array[3];
                  	array[0] = num;
                  	array[1] = otra;
                  	array[2] = otra_mas;
                  

                  Ya están en un array, el problema es que tienes que recordar en qué posición pusiste cada una y el lío en el código puede ser tremendo y resultaría en errores difíciles de encontrar.

                  Un saludo

                  E Offline
                  E Offline
                  Eduardo12l
                  wrote on last edited by
                  #11

                  @juanki Ok pero sí guardan relación entre si, pero solo quería saber como pasar de una ventana a otra Arrays. Si ahora no me sirviese tal vez podria utilizarlo en otra oportunidad. Me han dicho que trate las ventanas como si fueran clases del main() pero no me parece que tenga mucho sentido.

                  juankiJ 1 Reply Last reply
                  0
                  • E Eduardo12l

                    @juanki Ok pero sí guardan relación entre si, pero solo quería saber como pasar de una ventana a otra Arrays. Si ahora no me sirviese tal vez podria utilizarlo en otra oportunidad. Me han dicho que trate las ventanas como si fueran clases del main() pero no me parece que tenga mucho sentido.

                    juankiJ Offline
                    juankiJ Offline
                    juanki
                    Moderators
                    wrote on last edited by
                    #12

                    @Eduardo12l said in ¿Cómo pasar Arreglos de un Form a otro?:

                    Ok pero sí guardan relación entre si, pero solo quería saber como pasar de una ventana a otra Arrays.

                    Pues como cualquier otro parámetro, por ejemplo, el nombre del array en realidad es un puntero al primer elemento, así que puedes declarar el parámetro en el método que la recibe como un puntero. Tendrías que enviarle también como un segundo parámetro la dimensión del array, si no, no tendrías forma de saberlo, o usar una constante en la clase para guardar ese tamaño o algo así.

                    Me han dicho que trate las ventanas como si fueran clases del main() pero no me parece que tenga mucho sentido.

                    ¿Te refieres a crear todas las ventanas en el método main? Personalmente no lo hago así y no me gusta la idea, ten en cuenta cada una que crees va a ocupar memoria y si tu programa tiene varias, pues imagínate el gasto, para que después el usuario no las abra.

                    Además, como accederías a ellas cuando tienes que mostrarlas, ¿las pasas todas como parámetros?

                    Yo las voy creando/destruyendo según se van necesitando.

                    ¿Entiendo por tus preguntas que estás empezando en esto de la programación?

                    Un saludo

                    Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                    Procura escribir correctamente y sin faltas de ortografía.

                    Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                    E 1 Reply Last reply
                    0
                    • juankiJ juanki

                      @Eduardo12l said in ¿Cómo pasar Arreglos de un Form a otro?:

                      Ok pero sí guardan relación entre si, pero solo quería saber como pasar de una ventana a otra Arrays.

                      Pues como cualquier otro parámetro, por ejemplo, el nombre del array en realidad es un puntero al primer elemento, así que puedes declarar el parámetro en el método que la recibe como un puntero. Tendrías que enviarle también como un segundo parámetro la dimensión del array, si no, no tendrías forma de saberlo, o usar una constante en la clase para guardar ese tamaño o algo así.

                      Me han dicho que trate las ventanas como si fueran clases del main() pero no me parece que tenga mucho sentido.

                      ¿Te refieres a crear todas las ventanas en el método main? Personalmente no lo hago así y no me gusta la idea, ten en cuenta cada una que crees va a ocupar memoria y si tu programa tiene varias, pues imagínate el gasto, para que después el usuario no las abra.

                      Además, como accederías a ellas cuando tienes que mostrarlas, ¿las pasas todas como parámetros?

                      Yo las voy creando/destruyendo según se van necesitando.

                      ¿Entiendo por tus preguntas que estás empezando en esto de la programación?

                      Un saludo

                      E Offline
                      E Offline
                      Eduardo12l
                      wrote on last edited by Eduardo12l
                      #13

                      @juanki ```

                      Dialog1.h

                      public:
                      
                      explicit Dialog1(QWidget *parent = 0);
                          Dialog1(QWidget *parent = 0, int var = 0);
                          ~Dialog1();
                          QString curso;
                          int numero[10];
                          int cont;
                      
                      

                      Dialog 2.h

                      public:
                          explicit Dialog2(QWidget *parent = 0);
                          Dialog2(QWidget *parent = 0, const QString curso = "", const int *numero = 0);
                          int n = 0;
                      
                          ~Dialog2();
                      ...
                      private:
                      
                          int numero[10];
                          Ui::Dialog2 *ui;
                      

                      Dialog1.cpp
                      //your code here

                      void Dialog1::on_pushButton_clicked()
                      {
                          Dialog2 *v = new Dialog2(this, curso, numero);
                          close();
                          v->show();
                      }
                      
                      

                      Dialog2.cpp
                      //your code here

                      Dialog3::Dialog3(QWidget *parent, const int *numero) :
                          QDialog(parent),
                          ui(new Ui::Dialog3), numero(*numero) // Aqui me da error C2075 'la inicializacion de la matriz requiere una lista de inicializadores entre llaves'
                      {
                      

                      De todas maneras no funciona me sale ahora un solo error el C2075 pero no entiendo eso de incializarlo.
                      Bueno soy nuevo C++. Trato de convertir numero en vector o arreglo de una sola fila pero no me sale

                      1 Reply Last reply
                      0
                      • juankiJ Offline
                        juankiJ Offline
                        juanki
                        Moderators
                        wrote on last edited by
                        #14

                        Hola

                        Bueno, yo creo que la solución más fácil sería que dentro de Dialog2 declares la variable numero como un puntero en vez de como un array. El nombre de un array en realidad es un puntero a su primer elemento, así, cuando en Dialog1 creas la ventana Dialog2 ya le estás pasando un puntero al primer elemento del array. Personalmente es lo que hago, no soy ningún experto ni nada, pero creo que sería lo más fácil.

                        Si estás empezando con C++ te recomiendo que te pongas a aprender bien C++ y la programación orientada a objetos antes de meterte con Qt, si no tienes una buena base puedes complicarte mucho y dificultarte avanzar.

                        Un saludo

                        Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                        Procura escribir correctamente y sin faltas de ortografía.

                        Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                        E 1 Reply Last reply
                        0
                        • juankiJ juanki

                          Hola

                          Bueno, yo creo que la solución más fácil sería que dentro de Dialog2 declares la variable numero como un puntero en vez de como un array. El nombre de un array en realidad es un puntero a su primer elemento, así, cuando en Dialog1 creas la ventana Dialog2 ya le estás pasando un puntero al primer elemento del array. Personalmente es lo que hago, no soy ningún experto ni nada, pero creo que sería lo más fácil.

                          Si estás empezando con C++ te recomiendo que te pongas a aprender bien C++ y la programación orientada a objetos antes de meterte con Qt, si no tienes una buena base puedes complicarte mucho y dificultarte avanzar.

                          Un saludo

                          E Offline
                          E Offline
                          Eduardo12l
                          wrote on last edited by
                          #15

                          @juanki Tampoco funciona, ¿Conoces algun metodo para pasar de una sola varias variables?

                          1 Reply Last reply
                          0
                          • juankiJ Offline
                            juankiJ Offline
                            juanki
                            Moderators
                            wrote on last edited by juanki
                            #16

                            Como que no funciona. si tu declaras en el dialogo2 un puntero:

                            int *arrayNumeros;
                            

                            Y en el constructor le pasas el array:

                            Dialog2::Dialog2(int *numeros, QWidget *parent): QDialog(parent), ui(new Ui::Dialog2), arrayNumeros(numeros)

                            Seguro que ésto te imprime todos los números del array:

                            for(int i = 0; i < longitud_array; i++)
                                qDebug() << i << ": " << *(arrayNumeros + i);
                            

                            Como te dije, te recomiendo que te pongas con C++ antes de meterte con Qt.

                            Un saludo

                            Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                            Procura escribir correctamente y sin faltas de ortografía.

                            Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                            E 1 Reply Last reply
                            0
                            • juankiJ juanki

                              Como que no funciona. si tu declaras en el dialogo2 un puntero:

                              int *arrayNumeros;
                              

                              Y en el constructor le pasas el array:

                              Dialog2::Dialog2(int *numeros, QWidget *parent): QDialog(parent), ui(new Ui::Dialog2), arrayNumeros(numeros)

                              Seguro que ésto te imprime todos los números del array:

                              for(int i = 0; i < longitud_array; i++)
                                  qDebug() << i << ": " << *(arrayNumeros + i);
                              

                              Como te dije, te recomiendo que te pongas con C++ antes de meterte con Qt.

                              Un saludo

                              E Offline
                              E Offline
                              Eduardo12l
                              wrote on last edited by
                              #17

                              @juanki De todas maneras gracias por tu ayuda, he creado otro post en C++ Guru y ya creo que he logrado resolver el problema usando QVectors

                              1 Reply Last reply
                              0

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved