Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Problema con teclado virtual y SignalMapper
QtWS25 Last Chance

Problema con teclado virtual y SignalMapper

Scheduled Pinned Locked Moved Solved Spanish
4 Posts 2 Posters 1.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.
  • J Offline
    J Offline
    Janjio
    wrote on last edited by
    #1

    Buenas tardes, nuevamente recurro a vosotros en mi tedioso camino en el aprendizaje de Qt y C++

    Mi archivo de cabecera:

    #ifndef FRMTIEMPOS1_H
    #define FRMTIEMPOS1_H
    #include "mainwindow.h"
    #include <QMainWindow>
    #include <QSignalMapper>
    
    namespace Ui {
    class FrmTiempos1;
    }
    
    class FrmTiempos1 : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit FrmTiempos1(QWidget *parent = 0);
        ~FrmTiempos1();
        void cargaTiempos();
    
    
    private:
        Ui::FrmTiempos1 *uiFrmTiempos;
        QSignalMapper *mapeador;
    
    public slots:
    
        //Botones pie formulario
        void cierraTiempos1();
    
        //Botones teclado numerico
        void pulsa0();
        void pulsa00();
        void pulsa1();
        void pulsa2();
        void pulsa3();
        void pulsa4();
        void pulsa5();
        void pulsa6();
        void pulsa7();
        void pulsa8();
        void pulsa9();
        void pulsaPunto();
        void pulsaGuardaNum();
        void pulsaCLR();
        void pulsaDel();
        void pulsaCerrar();
    
        //Pulsacion sobre tiempos
        void pulsaNombre();
        void pulsaTiempo1();
        void pulsaTiempo2();
        void pulsaTiempo3();
        void pulsaTiempo4();
        void pulsaTiempo5();
        void pulsaTiempo6();
        void pulsaTiempo7();
        void pulsaTiempo8();
        void pulsaTiempo9();
        void pulsaTiempo10();
    
        void guardoTiempo(int numTiempo, int datoTiempo);
    };
    
    #endif // FRMTIEMPOS1_H
    

    Y mi cpp resumido al problema en cuestión:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "frmtiempos1.h"
    #include "ui_frmtiempos1.h"
    #include "frmLogin.h"
    #include <fstream>//Para leer y escribir ficheros
    #include <iostream>//Para leer y escribir en consola (cout y cin)
    #include <sstream>//Para funciones con cadenas
    #include <QMessageBox>
    #include <QSignalMapper>
    
    using namespace std;
    
    int tiempo_editado = 0;
    
    FrmTiempos1::FrmTiempos1(QWidget *parent) :
        QMainWindow(parent),
        uiFrmTiempos(new Ui::FrmTiempos1)
    {
        uiFrmTiempos->setupUi(this);
        mapeador = new QSignalMapper(this);
    }
    
    FrmTiempos1::~FrmTiempos1()
    {
        delete uiFrmTiempos;
    }
    
    void FrmTiempos1::pulsaNombre(){//Al pulsar sobre el botón Nombre
        uiFrmTiempos->frame_Teclado->setVisible(true);
        //mapeador = new QSignalMapper(this);
        connect(uiFrmTiempos->Bt_Q, SIGNAL(clicked()),mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_W, SIGNAL(clicked()),mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_E, SIGNAL(clicked()),mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_R, SIGNAL(clicked()),mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_T, SIGNAL(clicked()),mapeador, SLOT(map()));
    
        mapeador->setMapping(uiFrmTiempos->Bt_Q, QChar('Q'));
        mapeador->setMapping(uiFrmTiempos->Bt_W, QChar('W'));
        mapeador->setMapping(uiFrmTiempos->Bt_E, QChar('R'));
        mapeador->setMapping(uiFrmTiempos->Bt_R, QChar('T'));
        mapeador->setMapping(uiFrmTiempos->Bt_T, QChar('Y'));
    
    
        // Conexiones de los button con el signal mapper
        connect(uiFrmTiempos->Bt_Q, SIGNAL(pressed()), mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_W, SIGNAL(pressed()), mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_E, SIGNAL(pressed()), mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_R, SIGNAL(pressed()), mapeador, SLOT(map()));
        connect(uiFrmTiempos->Bt_T, SIGNAL(pressed()), mapeador, SLOT(map()));
    
        // Y conexion del signal mapper con el slot del lineEdit
        connect(mapeador, SIGNAL(mapped(QChar)), uiFrmTiempos->lineEdit, SLOT(setText(QChar)));
    }
    

    El problema que tengo es que básicamente no funciona, debería escribirme en lineEdit cada letra al pulsar el boton correspondiente y no hace nada.
    En la ventana de Debug me aparece este error:
    Object::connect: No such signal QSignalMapper::mapped(QChar) in ../frmtiempos1.cpp:303
    Object::connect: (receiver name: 'lineEdit')

    Indicando el error en la ultima linea donde conecto la señal de mapeador con el slot setText del lineEdit

    ¿Como es que no hay ninguna señal Qchar? No lo entiendo...

    juankiJ 1 Reply Last reply
    0
    • J Janjio

      Buenas tardes, nuevamente recurro a vosotros en mi tedioso camino en el aprendizaje de Qt y C++

      Mi archivo de cabecera:

      #ifndef FRMTIEMPOS1_H
      #define FRMTIEMPOS1_H
      #include "mainwindow.h"
      #include <QMainWindow>
      #include <QSignalMapper>
      
      namespace Ui {
      class FrmTiempos1;
      }
      
      class FrmTiempos1 : public QMainWindow
      {
          Q_OBJECT
      
      public:
          explicit FrmTiempos1(QWidget *parent = 0);
          ~FrmTiempos1();
          void cargaTiempos();
      
      
      private:
          Ui::FrmTiempos1 *uiFrmTiempos;
          QSignalMapper *mapeador;
      
      public slots:
      
          //Botones pie formulario
          void cierraTiempos1();
      
          //Botones teclado numerico
          void pulsa0();
          void pulsa00();
          void pulsa1();
          void pulsa2();
          void pulsa3();
          void pulsa4();
          void pulsa5();
          void pulsa6();
          void pulsa7();
          void pulsa8();
          void pulsa9();
          void pulsaPunto();
          void pulsaGuardaNum();
          void pulsaCLR();
          void pulsaDel();
          void pulsaCerrar();
      
          //Pulsacion sobre tiempos
          void pulsaNombre();
          void pulsaTiempo1();
          void pulsaTiempo2();
          void pulsaTiempo3();
          void pulsaTiempo4();
          void pulsaTiempo5();
          void pulsaTiempo6();
          void pulsaTiempo7();
          void pulsaTiempo8();
          void pulsaTiempo9();
          void pulsaTiempo10();
      
          void guardoTiempo(int numTiempo, int datoTiempo);
      };
      
      #endif // FRMTIEMPOS1_H
      

      Y mi cpp resumido al problema en cuestión:

      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      #include "frmtiempos1.h"
      #include "ui_frmtiempos1.h"
      #include "frmLogin.h"
      #include <fstream>//Para leer y escribir ficheros
      #include <iostream>//Para leer y escribir en consola (cout y cin)
      #include <sstream>//Para funciones con cadenas
      #include <QMessageBox>
      #include <QSignalMapper>
      
      using namespace std;
      
      int tiempo_editado = 0;
      
      FrmTiempos1::FrmTiempos1(QWidget *parent) :
          QMainWindow(parent),
          uiFrmTiempos(new Ui::FrmTiempos1)
      {
          uiFrmTiempos->setupUi(this);
          mapeador = new QSignalMapper(this);
      }
      
      FrmTiempos1::~FrmTiempos1()
      {
          delete uiFrmTiempos;
      }
      
      void FrmTiempos1::pulsaNombre(){//Al pulsar sobre el botón Nombre
          uiFrmTiempos->frame_Teclado->setVisible(true);
          //mapeador = new QSignalMapper(this);
          connect(uiFrmTiempos->Bt_Q, SIGNAL(clicked()),mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_W, SIGNAL(clicked()),mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_E, SIGNAL(clicked()),mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_R, SIGNAL(clicked()),mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_T, SIGNAL(clicked()),mapeador, SLOT(map()));
      
          mapeador->setMapping(uiFrmTiempos->Bt_Q, QChar('Q'));
          mapeador->setMapping(uiFrmTiempos->Bt_W, QChar('W'));
          mapeador->setMapping(uiFrmTiempos->Bt_E, QChar('R'));
          mapeador->setMapping(uiFrmTiempos->Bt_R, QChar('T'));
          mapeador->setMapping(uiFrmTiempos->Bt_T, QChar('Y'));
      
      
          // Conexiones de los button con el signal mapper
          connect(uiFrmTiempos->Bt_Q, SIGNAL(pressed()), mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_W, SIGNAL(pressed()), mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_E, SIGNAL(pressed()), mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_R, SIGNAL(pressed()), mapeador, SLOT(map()));
          connect(uiFrmTiempos->Bt_T, SIGNAL(pressed()), mapeador, SLOT(map()));
      
          // Y conexion del signal mapper con el slot del lineEdit
          connect(mapeador, SIGNAL(mapped(QChar)), uiFrmTiempos->lineEdit, SLOT(setText(QChar)));
      }
      

      El problema que tengo es que básicamente no funciona, debería escribirme en lineEdit cada letra al pulsar el boton correspondiente y no hace nada.
      En la ventana de Debug me aparece este error:
      Object::connect: No such signal QSignalMapper::mapped(QChar) in ../frmtiempos1.cpp:303
      Object::connect: (receiver name: 'lineEdit')

      Indicando el error en la ultima linea donde conecto la señal de mapeador con el slot setText del lineEdit

      ¿Como es que no hay ninguna señal Qchar? No lo entiendo...

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

      Hola

      ¿Como es que no hay ninguna señal Qchar? No lo entiendo...

      Señales hay "las que hay".

      Pero sí hay una que admite un QString

      ¿No te vale? en vez de

      mapeador->setMapping(uiFrmTiempos->Bt_Q, QChar('Q'));
      

      poner

      mapeador->setMapping(uiFrmTiempos->Bt_Q, "Q");
      

      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'.

      1 Reply Last reply
      0
      • J Offline
        J Offline
        Janjio
        wrote on last edited by
        #3

        Tienes razón, mirando la documentación ya he visto que acepta QString

        Cambiando la linea que me has puesto y la última por:

        connect(mapeador, SIGNAL(mapped(QString)), uiFrmTiempos->lineEdit, SLOT(setText(QString)));

        Ya no tengo error alguno en el Debug, pero sigo sin escribir nada en el lineEdit, voy a darle otro repasillo a ver...

        Muchas gracias.

        1 Reply Last reply
        0
        • J Offline
          J Offline
          Janjio
          wrote on last edited by
          #4

          Solucionado, era un fallo tontísimo. El color de letra y de fondo era el mismo y no se veía aunque si que escribía.

          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