Se puede registrar el numero de clicks que se hace en un Dialog, en otro Dialog?



  • Lo que deseo es que cada vez que le doy click a un boton en un Dialog0.ui, en un Dialog2.ui aparezca cuantas veces click le he dado hasta el momento.



  • Hola

    Una forma es usando señales. Conecta una señal de Dialog0 con un slot del Dialog2. Y cada vez que se pulse el botón, emites la señal. O, si al pulsar el botón no hay otra cosa que hacer, directamente puedes conectar la señal clicked del botón con el slot de la otra ventana.

    Un saludo



  • Diculpame, soy nuevo en esto ¿Como se hace eso? Quiero que un Pushbutton cuando le haga click haga aparecer en un Label que se encuentra en otro Dialog el numero de veces que hasta ahora le he dado click, pero si escribo en Dialog0:

    connect(ui->pushButton,SIGNAL(clicked(bool)),ui->label(setText(i)));
    

    No va a funcionar porque el label que esta en Dialog2 no va a ser reconocido por el Dialog0.



  • Podrias probar a sumar 1 a una variable en cada click y verla desde el otro dialog con "extern", por supuesto tienes que incluir el .h del dialog en el que quieres contar los click en el dialog que quieres ver los click.



  • Hola @Eduardo12l

    Bueno, esto se puede hacer de diferentes formas, te voy a poner un ejemplo emitiendo una señal que nosotros creemos. el primer paso es definir la señal que vamos a emitir, para eso en tu diálogo en el qu etienes el botón definimos la señal en el archivo .h:

    signals:
        void botonPulsado(int);
    

    Ahora, tenemos que emitir esa señal cuando se pulse el botón, por ejemplo podemos incrementar el contador y luego emitimos la señal, en el método on_click del botón:

    void Dialog::on_pushButton_clicked()
    {
        ++contador;
    
        emit botonPulsado(contador);
    }
    

    Ahora hay que crear un slot personalizado en el Dialog2, el que va a mostrar el número de click, para eso en su .h creamos un slot:

    public slots:
        void nuevoValor(int v);
    

    Y en el .cpp definimos el slot:

    void Dialog2::nuevoValor(int v)
    {
        ui->nombre_de_tu_label->setText(QString::number(v));
    }
    

    Ahora ya solo falta establecer la conexión, obvio que para que se muestre el valor, el segundo diálogo tiene que estar abierto:

    dialog2 = new Dialog2(this);
    connect(this, SIGNAL(botonPulsado(int)), dialog2, SLOT(nuevoValor(int)));
    
    dialog2->show();
    

    Y ya está, salvo errores al escribir, debería funcionar. Si no vas a hacer otra cosa con el contador, solo mostrar el número de veces, puedes definir la señal y el slot sin parámetros y el contador de clicks lo guardas en el diálogo2 y en el slot lo incrementas antes de mostrar el valor.

    Un saludo


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.