Problema con teclado virtual y SignalMapper



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



  • 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



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



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


Log in to reply