txt.file sortiert ausgeben. QStringList::sort() Fail

Alles rund um die Programmierung mit Qt
Antworten
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

txt.file sortiert ausgeben. QStringList::sort() Fail

Beitrag von Igell »

Hallo,
erstmal entschuldigung für die wenig aussage kräftige überschrift.
Ich sitze immer nach an meiner kleinen Fleis Arbeit
->http://www.qtforum.de/forum/viewtopic.php?t=10487
und komme momentan nicht weiter.

Code: Alles auswählen

//mywidget.cpp
#include "mywidget.h"
#include <QFileDialog>
#include <iostream>

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
    hLay1 = new QHBoxLayout;
    hLay2 = new QHBoxLayout;
    vLay1 = new QVBoxLayout;
    te1   = new QTextEdit;
    te2   = new QTextEdit;
    close = new QPushButton("Close");
    open  = new QPushButton("Open");
    sort  = new QPushButton("Sort");

    //hLay2 - HorizontalLayout Nr.2 - für die TextEditoren
    hLay2->addWidget(te1);
    hLay2->addWidget(te2);

    //vLay1 - VertikalLayout Nr.1 - für die Buttons
    vLay1->addWidget(sort);
    vLay1->addWidget(open);
    vLay1->addWidget(close);

    //hLay1 - HorizontalLayout Nr.1 - das HauptLayout
    hLay1->addLayout(hLay2);
    hLay1->addLayout(vLay1);

    this->connect(sort, SIGNAL(clicked()), this, SLOT(sort_file()));
    this->connect(open, SIGNAL(clicked()),this, SLOT(open_file()));
    this->connect(close, SIGNAL(clicked()), this, SLOT(close()));
    this->setLayout(hLay1);
}

MyWidget::~MyWidget()
{

}

void MyWidget::open_file()//SLOT
{
    QString str1;
    str1 = QFileDialog::getOpenFileName(this,"Datei Waehlen",QDir::homePath(),"Dokumente (*.txt)");
    this->set_str(str1);
    if(!str1.isEmpty())
    {
        QFile file(str);
        file.open(QIODevice::ReadOnly | QIODevice::Text);
        te1->setPlainText(file.readAll());
        file.close();
    }
}

void MyWidget::sort_file()// SLOT
{
    QString str1;
    str1 = this->get_str();
    if(!str1.isEmpty())
    {
        QFile file(str);
        file.open(QIODevice::ReadWrite | QIODevice::Text);
        QStringList strl(file.readAll());
        strl.sort();
        te2->setPlainText(strl.join(" XXxx "));
        file.close();
        //std::cout << "Test ------ innere Klammer beendet" << std::endl;
    }
}


QString MyWidget::get_str()
{
    return str;
}

void MyWidget::set_str(QString s)
{
    str = s;
}
Programm Ablauf :
Durch Drücken des "Open" Buttons wird ein Dialog zum auswählen einer Datei angezeigt.
Nach Auswahl der Text Datei schließt sich der Auswahldialog wider und die TextDatei wird auf dem erstem von zwei QTexteEdit angezeigt.
Durch Drücken des "Sort" Buttons soll nun der Text der auf dem erstem QTextEdit zu sehen ist, Alphabetisch sortiert auf dem zweitem QTextEdit angezeigt werden.
Durch Drücken des "Close" Buttons wird das Programm beendet.

Auf dem zweitem QTextEdit wird der gleiche Text ausgegeben wie auf dem erstem. Für anmerkungen, Ideehen, Vorschläge , kritik an Quellcode & Post bin ich dankbar.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Erklär uns was in dieser Zeile aus sort_file passiert:

Code: Alles auswählen

QStringList strl(file.readAll());
Was gibt QIODevice__readAll zurück? Welche QStringList-Konstruktoren gibt es? WAS passiert?
Das sollte dir die Augen öffnen ;)
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

Beitrag von Igell »

Ich kontrolliere schon mehrmals bevor ich hier was reinstelle, trotzdem kommen mir immer solche Fehler unter. :oops:

Ich danke dir für den Denkanstoß, hab es nun mit QTextStream gelöst.

Code: Alles auswählen

void MyWidget::sort_file()
{
    QString str1;
    str1 = this->get_str();
    if(!str1.isEmpty())
    {
        QFile file(str);
        file.open(QIODevice::ReadWrite | QIODevice::Text);
        QStringList strl;
        QTextStream tsre(&file);
        while(!tsre.atEnd())
        {
            tsre >> str1;
            strl << str1;
        }
        strl.sort();
        te2->setPlainText(strl.join("\n"));
        file.close();
    }
}
Wissen ist die einzige Ressource, die sich vermehrt wenn man sie teilt
Antworten