Seite 1 von 2

txt datei in TabWidget öffnen - Wie gehts?

Verfasst: 22. Dezember 2010 20:31
von Joont
Hallo,

ich sitze grade an einem kleinen Texteditor. Ich habe da allerdings jetzt folgendes Problem. Wenn ich eine Datei öffnen will dann möchte ich das sie in einem neuen Tab (QTabWidget) angezeigt wird. Der Tab soll auch gleichzeitig den Namen der Datei bekommen. Wie stelle ich das am besten an. Probiere da jetzt schon länger herum.
Die Sufu etc. habe ich schon benutzt und bin leider nicht fündig geworden. Ich hoffe man kann mir helfen. Hier mal Code zum Öffnen etc.


Code: Alles auswählen

void MyEditor::openFile(const QString &path)
{
    QString fileName = path;


    if (fileName.isNull())
        fileName = QFileDialog::getOpenFileName(this,
            tr("Datei Öffnen"), "", "Quelldateien (*.txt)");

    if (!fileName.isEmpty()) {
        QFile file(fileName);
        if (file.open(QFile::ReadOnly | QFile::Text))
            textEdit->setPlainText(file.readAll());
            statusBar()->showMessage( tr("Datei erfolgreich geöffnet"), 5000 );
    }
}

Verfasst: 22. Dezember 2010 22:34
von upsala
Und wo ist dein QTabWidget?

Verfasst: 22. Dezember 2010 22:53
von Joont
Das ist da nicht bei. Ich habe diesen Code abschnitt wieder auf das normale öffnen zurück gesetzt. Damit man mir sagen kann wo und an welcher stelle ich das mit dem Tab machen muss. Das dumme ist ich habe ne menge ausprobiert und nicht hat funktioniert. Ich weiß nicht wie ich die zu öffnende Datei in einen neuen Tab hinein bekomme. Bei einer neuen Datei anlegen funzt es ja schon.

Verfasst: 22. Dezember 2010 23:15
von upsala
Eine Datei bekommt man überhaupt nicht in einen Tab rein, sondern man kann den Inhalt einer Datei entweder in einem QLabel, einem QTextEdit usw. darstellen. Und da diese von QWidget abgeleitet sind, kann man diese Widgets dem QTabWidget hinzufügen.

Verfasst: 22. Dezember 2010 23:21
von Joont
Ja okay da hast du recht. Bei mir ist es ja das QTextEdit und den Text aus einer txt - Datei zum Beispiel möchte ich beim öffnen in einem neuen Tab bekommen. Ohne das eine vielleicht geöffnete Datei einfach überschrieben wird.

Verfasst: 23. Dezember 2010 10:40
von franzf
Fang in der Doku bei QTextStream an, da gibt es auch ein paar Beispiele zur Benutzung.
Wenn du die ganze Textdatei auf einen Schwupps in einen String haben willst, nimmst du QTextStream::readAll().

Verfasst: 23. Dezember 2010 12:51
von Joont
Okay. Ich werde mir das noch mal genau anschauen und noch mals versuchen. Ich werde mich noch mal melden dann.

Verfasst: 23. Dezember 2010 15:46
von Joont
Hey,

also ich habe es grade gelöst. Hier mal der Code für eventuelle Nachfolger:

Code: Alles auswählen

void MyEditor::openFile()
{
    textEdit    = new QTextEdit;
    QString fileName = QFileDialog::getOpenFileName(
            this, "Bitte eine Datei wählen",
            QDir::homePath(), "Dateiendungen (*.txt *.html *.htm *.php *.css)");


    if (!fileName.isEmpty()) {
        QFile file(fileName);
    if (file.open(QFile::ReadOnly | QFile::Text))
        //Text wird in Widget geschrieben

        textEdit->insertPlainText(file.readAll());
        statusBar()->showMessage( tr("Datei erfolgreich geöffnet"), 5000 );
        tab->addTab(textEdit, fileName);
        tab->tabPosition();
    }

}

Verfasst: 23. Dezember 2010 16:01
von upsala

Code: Alles auswählen

   tab->tabPosition(); 

Das ergibt keinen Sinn, da diese Methode nur dazu dient einen Wert abzufragen.

Verfasst: 23. Dezember 2010 16:12
von Joont
Hoppla. Das gehört da auch gar nimmer hin. Ich muss das wohl übersehen haben. Sorry.

Verfasst: 23. Dezember 2010 16:59
von Joont
Jetzt habe ich noch mal eine Frage. Mir ist grade aufgefallen, das wenn zwei Tabs vorhanden sind und ich den ersten Tab inhalt speichern möchte das er dann den inhalt von dem zwieten Tab speichert. Also was ich mein ist es wird immer der Inhalt von dem neusten Tab gespeichert. Wieso ist das so und warum?

Verfasst: 23. Dezember 2010 18:48
von upsala
Weder QTextEdit noch QTabWidget haben eine save()-Methode somit hast du den Code selbstgebaut, woher sollen wir dann wissen wie deine save()-Methode aussieht?

Verfasst: 23. Dezember 2010 21:46
von Joont
Hmm stimmt...

also hier der Quellcode:

Code: Alles auswählen

void MyEditor::saveFile()
{
    QString fileName = QFileDialog::getSaveFileName(
            this, tr("Datei Speichern"), "", "Textdatei (*.txt);;"
                                        "HTML - Quelldatei (*.html *.htm);;"
                                        "PhP - Quelldatei (*.php);;"
                                        "Cascading Stylesheet (*.css)");
    if( fileName.isEmpty() ) return;
    QFile file(fileName);
    if( file.open(QIODevice::WriteOnly|QIODevice::Text) )
    {
        file.write(textEdit->toPlainText().toUtf8());
        statusBar()->showMessage( tr("Datei erfolgreich gespeichert"), 5000 );

    }
}

Verfasst: 23. Dezember 2010 21:52
von franzf
Kann es sein, dass du irgend so einen Code hast?

Code: Alles auswählen

class Window {
QTextEdit* textEdit;
public:
  void addTab() {
    textEdit = new QTextEdit;
    // textEdit in Tab einfügen usw
  }
};
Und dann einfach öfters diese Methode aufrufst?

Verfasst: 23. Dezember 2010 22:04
von Joont
ehm ja ich erstelle beim Programm start ein neues Widget dann bei openFile und zu letzt beim neuen Dokument. Ich poste mal den ganzen Code dann könnt ihr mehr damit anfangen hoffe ich:

Das ist die Editor .cpp

Code: Alles auswählen

MyEditor::MyEditor(QMainWindow *parent) : QMainWindow(parent)
{

    MyEditor::showMaximized();                                                               
    this->setCentralWidget(new QWidget(this));                                               //Das MainWindow erstellen und anzeigen

    //Statusbar hinzufügen
    (void*)statusBar();

    //Datei, Bearbeiten etc. hinzufügen
    QMenu *fileMenu = new QMenu(tr("&Datei"), this);
    menuBar()->addMenu(fileMenu);
    QMenu *workMenu = new QMenu(tr("&Bearbeiten"), this);
    menuBar()->addMenu(workMenu);
    QMenu *settingMenu = new QMenu(tr("&Einstellungen"), this);
    menuBar()->addMenu(settingMenu);
    QMenu *helpMenu = new QMenu(tr("&Hilfe"), this);
    menuBar()->addMenu(helpMenu);

    //Untermenüs bei Datei
    fileMenu->addAction(QIcon("../img/icons/new.png"), tr("&Neue Dokument"), this, SLOT( newFile() ),
    QKeySequence(tr("Ctrl+N", "Datei|Neu")));
    fileMenu->addAction(QIcon("../img/icons/open.png"), tr("&Öffnen..."), this, SLOT( openFile() ),
    QKeySequence(tr("Ctrl+O", "Datei|Öffnen")));
    fileMenu->addAction(QIcon("../img/icons/save.png"), tr("&Speichern unter"), this, SLOT( saveFile() ),
    QKeySequence(tr("Ctrl+S", "Datei|Speichern")));
    fileMenu->addAction(QIcon("../img/icons/close.png"), tr("&Beenden"), qApp, SLOT( quit() ),
    QKeySequence(tr("Ctrl+B", "Datei|Beenden")));

    //Erzeugen des Textbereiches
    textEdit    = new QTextEdit;

    //Erzeugen des TabWidgets
    tab             = new QTabWidget;
    tab->addTab(textEdit, "Neue Datei");
    tab->show();
    setCentralWidget(tab);

}

void MyEditor::newFile()
{
    textEdit    = new QTextEdit;
    tab->addTab(textEdit, "Neue Datei");
}

void MyEditor::openFile()
{
    textEdit    = new QTextEdit;
    QString fileName = QFileDialog::getOpenFileName(
            this, "Bitte eine Datei wählen",
            QDir::homePath(), "Textdatei (*.txt);;"
                              "HTML - Quelldatei (*.html *.htm);;"
                              "PhP - Quelldatei (*.php);;"
                              "Cascading Stylesheet (*.css)");


    if (!fileName.isEmpty()) {
        QFile file(fileName);
    if (file.open(QFile::ReadOnly | QFile::Text))

        textEdit->insertPlainText(file.readAll());
        statusBar()->showMessage( tr("Datei erfolgreich geöffnet"), 5000 );
        tab->addTab(textEdit, fileName);
    }

}

void MyEditor::saveFile()
{

    QString fileName = QFileDialog::getSaveFileName(
            this, tr("Datei Speichern"), "", "Textdatei (*.txt);;"
                                        "HTML - Quelldatei (*.html *.htm);;"
                                        "PhP - Quelldatei (*.php);;"
                                        "Cascading Stylesheet (*.css)");
    if( fileName.isEmpty() ) return;
    QFile file(fileName);
    if( file.open(QIODevice::WriteOnly|QIODevice::Text) )
    {
        file.write(textEdit->toPlainText().toUtf8());
        statusBar()->showMessage( tr("Datei erfolgreich gespeichert"), 5000 );

    }
}

[/b]