Problema al grabar archivo de texto



  • hola a todos, tengo el siguiente codigo y lo que pasa es que me esta escribiendo 2 veces los datos en el archivo de texto, como si le hiciera dos clicks al push buton. Me estaria quedando el archivo del doble de tamaño cada vez que escribe en el archivo. La idea seria usar el manejo de archivos de "C" y "C++" pero no se porque sucede esto.

    @//pruebin.cpp
    #include "pruebin.h"
    #include "ui_pruebin.h"
    #include <string>
    using namespace std;

    pruebin::pruebin(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::pruebin)
    {
    ui->setupUi(this);
    connect(ui->pushButton,SIGNAL(clicked()),SLOT(on_pushButton_clicked()));
    }

    pruebin::~pruebin()
    {
    delete ui;
    }
    FILE *arc;

    struct datos{
    char name[30];
    char edad[2];
    char peso[2];
    };
    datos dat;

    void pruebin::on_pushButton_clicked() //SLOT de la señal clicked
    {
    arc=fopen("prueba.txt","a+");
    QString nam=ui->lineEdit->text();
    QString edd=ui->lineEdit_2->text();
    QString pes=ui->lineEdit_3->text();

    string nnn=nam.toStdString();
    string eee=edd.toStdString();
    string ppp=pes.toStdString();
    
    strncpy(dat.name,nnn.c_str(),sizeof(dat.name));
    strncpy(dat.edad,eee.c_str(),sizeof(dat.edad));
    strncpy(dat.peso,ppp.c_str(),sizeof(dat.peso));
    
    fwrite(&dat,sizeof(dat),1,arc);
    fclose(arc);
    

    }@



  • Hola

    Pues acabo de hacer copiar->pegar de tu código y me funciona bien. Cada vez que le doy al botón me guarda los datos una sola vez.

    Fíjate que no esté el botón como "default" y se ejecute el código al pulsar intro.

    Pon también una línea que te muestre un texto por consola al ejecutarse el método, así sabrás cada vez que el método se ejecuta.

    Saludos



  • A mi no me quiere funcionar y si ya puse un contador y si esta haciendo un bucle, como si yo le hiciera dos veces "click" pero no se porque es? ayuda XD, lo que tu me dices del boton no se donde es, si es en el "property editor" en la parte QPushbutton si esta desmarcado la opcion default.
    [quote author="juanki" date="1404725132"]Hola

    Pues acabo de hacer copiar->pegar de tu código y me funciona bien. Cada vez que le doy al botón me guarda los datos una sola vez.

    Fíjate que no esté el botón como "default" y se ejecute el código al pulsar intro.

    Pon también una línea que te muestre un texto por consola al ejecutarse el método, así sabrás cada vez que el método se ejecuta.

    Saludos[/quote]



  • Hola

    [quote author="shikamarucb" date="1404761613"]... en la parte QPushbutton si esta desmarcado la opcion default.
    [/quote]

    Prueba desmarcándolo, y el que pone autoDefault. Cuando un botón tiene esa propiedad marcada, cuando pulsas intro hace la pulsación del botón.

    Saludos



  • Hola es que ya estan desmarcados, pero no quiere funcionar, me graba dos veces el archivo.
    [quote author="juanki" date="1404767587"]Hola

    [quote author="shikamarucb" date="1404761613"]... en la parte QPushbutton si esta desmarcado la opcion default.
    [/quote]

    Prueba desmarcándolo, y el que pone autoDefault. Cuando un botón tiene esa propiedad marcada, cuando pulsas intro hace la pulsación del botón.

    Saludos
    [/quote]



  • Hola

    Lo que te ocurre es que estás conectando dos veces la señal con el slot.

    Tu has creado la conexión desde QtDesigner, pulsando con el botón derecho sobre el botón. Eso te crea un método de nombre on_TuBotón_Señal, en tu caso queda on_pushButton_clicked, o sea, una conexión "automática" que se dispara cuando se pulsa el botón.

    Y luego, además, estás usando connect en el constructor, por lo que estás creando una segunda conexión, por tanto, el slot se dispara dos veces y te guarda los datos dos veces.

    Borra la línea connect(...) del constructor. Cuando conectas las señales desde QtDesigner luego no tienes que volver a conectarlas manualmente.

    Se me había pasado por que solo copié el método on_pushButton_clicked cuando hice el ejemplo.

    Saludos



  • aaaa ya, MUCHISIMAS GRACIAS, me has salvado, ya me dolia la cabeza de examinar que era lo que pasaba. GRACIAS!!
    [quote author="juanki" date="1404808282"]Hola

    Lo que te ocurre es que estás conectando dos veces la señal con el slot.

    Tu has creado la conexión desde QtDesigner, pulsando con el botón derecho sobre el botón. Eso te crea un método de nombre on_TuBotón_Señal, en tu caso queda on_pushButton_clicked, o sea, una conexión "automática" que se dispara cuando se pulsa el botón.

    Y luego, además, estás usando connect en el constructor, por lo que estás creando una segunda conexión, por tanto, el slot se dispara dos veces y te guarda los datos dos veces.

    Borra la línea connect(...) del constructor. Cuando conectas las señales desde QtDesigner luego no tienes que volver a conectarlas manualmente.

    Se me había pasado por que solo copié el método on_pushButton_clicked cuando hice el ejemplo.

    Saludos[/quote]


Log in to reply
 

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