Como acceder desde una clase a widgets del MainWindow
-
Buenas
Tengo una clase para comunicarme con el arduino, desde ella recojo los datos leyéndolos a través del puerto serie en un hilo aparte del main y los guardo en variables para luego representarlas en una gráfica en tiempo real. Mi pregunta es, hay alguna forma de pasárselos al MainWindow para que los represente en las gráficas y en los label del formulario principal??
Puedo trabajar con porcentajes en los widgets para que se adapten al tamaño de pantalla donde ejecuto la aplicación?
Muchas gracias,
Un saludo -
Hola
@Sergio said:
Tengo una clase para comunicarme con el arduino, desde ella recojo los datos leyéndolos a través del puerto serie en un hilo aparte del main y los guardo en variables para luego representarlas en una gráfica en tiempo real. Mi pregunta es, hay alguna forma de pasárselos al MainWindow para que los represente en las gráficas y en los label del formulario principal??
Si has usado QtCreator y QtDesigneg para crear la ventana, todo lo que hayas puesto en la ventana estará accesible a través del puntero ui que te crea Qt.
Si necesitas acceder a los elementos de la ventana desde otra clase, tendrás que pasarle un puntero para que puedas interactuar con ellos.
@Sergio said:
Puedo trabajar con porcentajes en los widgets para que se adapten al tamaño de pantalla donde ejecuto la aplicación?
Usando los layout puedes hacer que el contenido de la ventana se vaya "reajustando" según redimensionas la ventana.
Un saludo
-
Hola @juanki
Muchas gracias, intentare a ver si me sale. En un principio intente pasarle un puntero a la clase de comunicaciones, donde en el constructor de la misma le paso el puntero ui del mainwindow.
Por otra parte, lo de los porcentajes intentare hacerlo en los dias proximos y si tengo algún problema ya vuelvo a preguntar.
Un saludo.
-
Buenas de nuevo,
Tengo una duda, como comento antes tengo un hilo que utiliza el serial para leer datos del arduino. Quería saber como se hace para que el hilo este comprobando continuadamente (es decir leyendo todo el rato) si hay datos disponibles. He usado el movetothread para crear el hilo pero creo que tengo que usar señales para que el hilo empiece a leer.
En mainWindow tengo un boton start para que abra el puerto serie que selecciono en un comboBox y ahí es cuando creo el hilo para que este leyendo del puerto serie. La funcion es:
hilo_lec = new QThread(this); com->moveToThread(hilo_lec); qDebug()<<"hilo: "<<hilo_lec->currentThreadId(); //Empieza la lectura de los datos //aqui es donde no se como hacer que llame a la funcion //leer que tengo en la clase comunicaciones.
Muchas gracias,
un saludo. -
@Sergio said:
Hola @juanki
Muchas gracias, intentare a ver si me sale. En un principio intente pasarle un puntero a la clase de comunicaciones, donde en el constructor de la misma le paso el puntero ui del mainwindow.
Por otra parte, lo de los porcentajes intentare hacerlo en los dias proximos y si tengo algún problema ya vuelvo a preguntar.
Un saludo.
Hola, a ver si puedo ayudarte. Supongo que tu clase Comunicaciones obtiene los datos de tu placa Arduino y los guardará en algún sitio, podrías intentar crear una instancia de Comunicaciones en la clase MainWindows, utilizar métodos de Comunicaciones que obtengan esos datos, y como en la clase MainWindows tienes el elemento "ui" desde el que accedes a los widgets pues les vas dando esos valores (Lo de pasar ui a otra clase es un poco raro, no lo he visto en ningún sitio).
Ahora el problema está en que necesitas usar algo que funcione en tiempo real, es decir, que te dé continuamente los datos de la placa. Yo en este tema no te puedo ayudar porque lo di en Java, pero parece ser que hay un método que indica cuándo cambia la señal de un puerto, con lo que puedes actualizar tu gráfico cada vez que cambia. Te he encontrado este ejemplo a ver si te sirve: http://www.advsofteng.com/doc/cdcppdoc/realtimedemoqt.htm
Si se da el caso de que necesites recibir, por ejemplo, 4 datos a la vez, y cuando estén mostrarlo en el gráfico, necesitarás usar concurrencia. Un saludo.