txt datei in TabWidget öffnen - Wie gehts?

Alles rund um die Programmierung mit Qt
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

txt datei in TabWidget öffnen - Wie gehts?

Beitrag 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 );
    }
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und wo ist dein QTabWidget?
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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().
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag von Joont »

Okay. Ich werde mir das noch mal genau anschauen und noch mals versuchen. Ich werde mich noch mal melden dann.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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();
    }

}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

   tab->tabPosition(); 

Das ergibt keinen Sinn, da diese Methode nur dazu dient einen Wert abzufragen.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag von Joont »

Hoppla. Das gehört da auch gar nimmer hin. Ich muss das wohl übersehen haben. Sorry.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

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

    }
}
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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?
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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]
Antworten