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.4k 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.
  • E Offline
    E Offline
    Eduardo12l
    wrote on last edited by Eduardo12l
    #1

    Soy nuevo tanto en C++ como en QT y quiero saber si hay alguna manera de pasar Arreglos de un Form a otro, utilizando un formato como el siguiente:

    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();
    }

    En el caso que les acabo de mostrar Curso y Numero son QStrings, y ahi el formato si funciona, sin embargo, con arreglos me sale error C2548. Alguna recomendacion? Si es que no se pudiera en ese formato, dadme cualquier otro por favor.

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

      Hola

      Poderse, seguro que se podrá, no recuerdo si alguna vez lo hice.

      Lo que habría que ver es cómo lo estás pasando y cómo lo recibes, no has mostrado esa parte del código.

      También lo que haces con él, ese close() que aparece en el código. ¿Cierras el diálogo antes de abrir el otro?

      ¿No se estará destruyendo el array, y luego tratas de usarlo en el nuevo diálogo que abres? Recuerda que en C, una variable de tipo array en realidad es un puntero al primer elemento.

      En fin, como no des más datos difícil va a ser que alguien pueda ayudarte.

      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

        Poderse, seguro que se podrá, no recuerdo si alguna vez lo hice.

        Lo que habría que ver es cómo lo estás pasando y cómo lo recibes, no has mostrado esa parte del código.

        También lo que haces con él, ese close() que aparece en el código. ¿Cierras el diálogo antes de abrir el otro?

        ¿No se estará destruyendo el array, y luego tratas de usarlo en el nuevo diálogo que abres? Recuerda que en C, una variable de tipo array en realidad es un puntero al primer elemento.

        En fin, como no des más datos difícil va a ser que alguien pueda ayudarte.

        Un saludo

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

        @juanki
        Lo envio de un Dialog1 a Dialog 2

        En Dialog1.cpp, al presionar el boton debe enviarme al Dialog2 con las variables (ya llenadas) de numero y curso
        como se ven en el siguiente

        Dialog1.cpp

        0_1488215148801_upload-b01829cd-4f84-4ac2-b39a-30125e7673d0

        Dialog1.H .-

        0_1488215202828_upload-5ea7a988-58ad-4313-8788-6a51ba75980b

        Dialog2.cpp.-
        0_1488215298464_upload-83b56230-88b8-4ebe-a4d1-3743e2993112

        Dialog2.h.-
        0_1488215358942_upload-940e449d-578a-4a9c-a1f4-60226952f4b1

        Estas imagenes son las que tienen que ver, con la funcion. Lo que hace el Close() es cerrar la ventana anterior y lo que hace el Show() es mostrar la siguiente, en Este caso cierra Dialog1 y se abre Dialog2

        1 Reply Last reply
        0
        • 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