Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Zawartość ListView z pliku tekstowego
Forum Updated to NodeBB v4.3 + New Features

Zawartość ListView z pliku tekstowego

Scheduled Pinned Locked Moved Polish
6 Posts 2 Posters 3.9k 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.
  • P Offline
    P Offline
    pol102
    wrote on last edited by
    #1

    Witam!

    Mam interesujący problem. Tytułem wstępu: mam QLineEdit, QDateEdit oraz QListView. Nie jest dla mnie problemem dodanie czegoś ot tak do listy. Problem w tym, że zawartość tej listy muszę przechowywać w pliku tekstowym.

    !http://i45.tinypic.com/29nec5y.jpg(HowItShouldWork)!
    Nie mam koncepcji jak to rozwiązać (tu jest pierwszy zgrzyt), a jest to o tle istotne, że przy otwieraniu okna trzeba sprawdzić czy plik istnieje i jeśli istnieje, to trzeba nim wypełnić listę... Najtrudniejsze jest to, że jeśli usunę wpis z listy to powinna zniknąć z pliku txt informacja o tym, (nie wiem dlaczego kojarzy mi się z parsowaniem) bo o ile pokazywanie na liście jako tekst ma sens o tyle szkoda żeby data traciła na użyteczności. Jakąś ideą jest taka zawartość pliku:
    nazwaszkolenia[i], dataszkolenia[i];
    nazwa szkolenia[i++], dataszkolenia[i++];

    Jest to dla mnie trudne do realizacji bo nie wiem na ile moja koncepcja jest logiczna i możliwa do zrealizowania. Za wszelakie wskazówki z góry dziękuję ;)

    EDIT:
    Z odczytem sobie chałupniczo poradziłem (względnie):
    @QString zawartoscPodstawowa = file.readLine();
    ui->SzkoleniacomboBox->addItem(zawartoscPodstawowa);@

    Nie działa to najlepiej bo dorzuca znak przejścia do nowej linii przez co psuje wygląd ale działa. Jeśli ktoś wie jak się takiego efektu pozbyć, to proszę o oświecenie ;)

    Przykre jest też to, że while(zawartoscPodstawowa != " "){
    kod powyżej
    }
    nie nadaje się do szukania końca wczytywania.

    1 Reply Last reply
    0
    • C Offline
      C Offline
      Cholineus
      wrote on last edited by
      #2

      Witam,
      Po pierwsze poleciłbym korzystanie z XML było by o wiele łatwiejsze i szybsze w Twoim wypadku.
      Link: http://doc.qt.digia.com/qt/qtxml.html (jeślibyłbys zainteresowany)

      A co do edycji "dorzuca znak przejścia do nowej linii przez co psuje wygląd ale działa" po prostu
      zignorujemy whitespaces czyli:
      @QString zawartoscPodstawowa = file.readLine();
      zawartoscPodstawowa = zawartoscPodstawowa.simplified();
      ui->SzkoleniacomboBox->addItem(zawartoscPodstawowa);@

      No i po trzecie:
      "Przykre jest też to, że while(zawartoscPodstawowa != “ “){
      kod powyżej
      }
      nie nadaje się do szukania końca wczytywania."

      @while(zawartoscPodstawowa != NULL){
      kod powyżej
      }@

      Pozdrawiam.

      1 Reply Last reply
      0
      • P Offline
        P Offline
        pol102
        wrote on last edited by
        #3

        @ //budowanie listy
        QString fileName = ("D:\szkolenia.txt");
        QFile file(fileName);
        if (!file.open(QIODevice::ReadOnly)) {
        QMessageBox::critical(this, tr("Error"),
        tr("Nie mogę wczytać listy szkoleń"));
        return;
        }
        QString zawartoscPodstawowa = file.readLine();
        zawartoscPodstawowa = zawartoscPodstawowa.simplified();
        while(zawartoscPodstawowa != NULL){
        QString zawartoscPodstawowa = file.readLine();
        zawartoscPodstawowa = zawartoscPodstawowa.simplified();
        ui->SzkoleniacomboBox->addItem(zawartoscPodstawowa);
        }
        file.close();
        @
        Chyba nie zrozumiałem o co kaman bo systematycznie wieszam program. W czym popełniłem błąd?

        1 Reply Last reply
        0
        • C Offline
          C Offline
          Cholineus
          wrote on last edited by
          #4

          Hmm, spróbuj przed while usunąć tą linijke " zawartoscPodstawowa = zawartoscPodstawowa.simplified();" ponieważ moze null zamienia na spacje.

          Edit
          Spróbuj użyć QTextStream bo nie zauwazyłem ze masz. :)
          @ QString fileName = ("D:\szkolenia.txt");
          QFile file(fileName);
          if (!file.open(QIODevice::ReadOnly| QIODevice::Text)) {
          QMessageBox::critical(this, tr("Error"),
          tr("Nie mogę wczytać listy szkoleń"));
          return;
          }
          QTextStream text(&file);

                         while(!text.atEnd()){
                      
                      QString zawartoscPodstawowa = text.readLine();
                          zawartoscPodstawowa = zawartoscPodstawowa.simplified();
                           ui->SzkoleniacomboBox->addItem(zawartoscPodstawowa);
                      }
                      file.close();@
          
          1 Reply Last reply
          0
          • P Offline
            P Offline
            pol102
            wrote on last edited by
            #5

            Nie do końca rozumiem dlaczego while w pierwszej opcji nie działał tak jak powinien ale najważniejsze, że obecnie działa wszystko tak jak powinno ;)

            Dzięki wielkie!

            1 Reply Last reply
            0
            • P Offline
              P Offline
              pol102
              wrote on last edited by
              #6

              !http://i47.tinypic.com/4t6mvc.jpg(cos)!
              Generalnie muszę przepisać wszystko co mam w tych dwóch oknach bo użyłem QDialog, a możliwość ich równoczesnego istnienia jest z mojego punktu widzenia, totalnie niekorzystna. Głębiej się też zastanowiłem nad działaniem tej części programu. Brakuje mi możliwości stworzenia takiej relacji SQL'owej bo teraz muszę operować na liniach w pliku. Wystarczy prosty błąd po stronie użytkownika i mogę mieć problem. Do tej pory myślałem tak: dodawać nazwę szkolenia i datę, zapisywać to w pliku i po każdym dodaniu szkolenia na nowo wczytywać zawartość pliku do ListView. Tą samą zawartość pliku tylko w całości jako String wczytywać do Combo boxa i wybierając z niego pozycję dodawać szkolenia w pierwszym oknie z danymi użytkownika. Teraz wydaje mi się to megabezsensowne. I chyba słusznie.
              Zapisywanie wynika z tego, że nie chcę tracić zawartości ListView przy każdym niszczeniu okna.
              Pewnie gdybym wiedział jak się je XML'a to można by sobie sprawę uprościć.

              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