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 al grabar archivo de texto

Problema al grabar archivo de texto

Scheduled Pinned Locked Moved Spanish
7 Posts 2 Posters 2.5k Views 1 Watching
  • 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.
  • S Offline
    S Offline
    shikamarucb
    wrote on last edited by
    #1

    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);
    

    }@

    1 Reply Last reply
    0
    • juankiJ Offline
      juankiJ Offline
      juanki
      Moderators
      wrote on last edited by
      #2

      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

      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
      • S Offline
        S Offline
        shikamarucb
        wrote on last edited by
        #3

        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]

        1 Reply Last reply
        0
        • juankiJ Offline
          juankiJ Offline
          juanki
          Moderators
          wrote on last edited by
          #4

          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

          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
          • S Offline
            S Offline
            shikamarucb
            wrote on last edited by
            #5

            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]

            1 Reply Last reply
            0
            • juankiJ Offline
              juankiJ Offline
              juanki
              Moderators
              wrote on last edited by
              #6

              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

              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
              • S Offline
                S Offline
                shikamarucb
                wrote on last edited by
                #7

                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]

                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