ok habe mich mal an dem beispiel von qt versucht. das speichern unter fenster wird nun aufgerufen, doch wenn ich nun einen dateinamen angebe und auf speichern klicke stürzt mein programm ab oO. könnte es sein, dass ich keinen inhalt angebe der gespeichert werden soll, das gleiche passiert im übrigen wenn ich auf laden klicke, wenn ja wie kann ich das explizit festlegen? hier mein jetziger code:
Code: Alles auswählen
/*Beeinhaltet die GUI Darstellung,
also hier ist das ganze Interface definiert
*
* Datei: mathomadaja.cpp Autor: ***** *****
* Datum: 01.05.2008
*
* Historie: Entwicklungsphase, d.h. andauernde Änderungen
*/
#include "MathoMadaja.h"
MathoMadaja::MathoMadaja(QMainWindow *parent) : QMainWindow(parent){
setupUi(this);
sortierung -> setText("Sortierung festlegen"); /*Setzt in das Feld sortierung den Inhalt "Sortierung festlegen"*/
/*Verbindet jeweils das im QT-Designer festgelegte Element, mit einer der folgenden Funktionen*/
connect( actionBeenden_2 , SIGNAL ( triggered() ) , this , SLOT ( slotBeenden() ) );
connect( actionNeu , SIGNAL ( triggered() ) , this , SLOT ( neueDatei() ) );
connect( actionOeffnen , SIGNAL ( triggered() ) , this , SLOT ( Oeffnen() ) );
connect( actionSpeichern , SIGNAL ( triggered() ) , this , SLOT ( Speichern() ) );
connect( actionSpeichern_unter , SIGNAL ( triggered() ) , this , SLOT ( Speichern_unter() ) );
connect( actionUeber , SIGNAL ( triggered() ) , this , SLOT ( Ueber() ) );
}
MathoMadaja::~MathoMadaja(){
}
void MathoMadaja::slotBeenden()
{
close();
}
void MathoMadaja::neueDatei()
{
if (maybeSave()) {
textEdit->clear();
setCurrentFile("");
}
}
void MathoMadaja::Oeffnen()
{
if (maybeSave()) {
QString fileName = QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty())
loadFile(fileName);
}
}
bool MathoMadaja::Speichern()
{
if (curFile.isEmpty()) {
return Speichern_unter();
} else {
return saveFile(curFile);
}
}
bool MathoMadaja::Speichern_unter()
{
QString fileName = QFileDialog::getSaveFileName(this);
if (fileName.isEmpty())
return false;
return saveFile(fileName);
}
void MathoMadaja::Ueber()
{
QMessageBox::about(this, tr("About Application"),
tr("<b>MathoMadaja</b> ist ein Programm welches<br>"
" im Rahmen des Inforamtik 2 Projektes entstand.<br>"
" MathoMadaja Version 1.0<br>"
"---------------------------------------------------<br>"
"Copyright 2008 MathoMadaja Team"));
}
void MathoMadaja::documentWasModified()
{
setWindowModified(textEdit->document()->isModified());
}
bool MathoMadaja::maybeSave()
{
if (textEdit->document()->isModified()) {
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("Application"),
tr("The document has been modified.\n"
"Do you want to save your changes?"),
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
if (ret == QMessageBox::Save)
return Speichern();
else if (ret == QMessageBox::Cancel)
return false;
}
return true;
}
void MathoMadaja::loadFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot read file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return;
}
QTextStream in(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
textEdit->setPlainText(in.readAll());
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
statusBar()->showMessage(tr("File loaded"), 2000);
}
bool MathoMadaja::saveFile(const QString &fileName)
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot write file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return false;
}
QTextStream out(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
out << textEdit->toPlainText();
QApplication::restoreOverrideCursor();
setCurrentFile(fileName);
statusBar()->showMessage(tr("File saved"), 2000);
return true;
}
void MathoMadaja::setCurrentFile(const QString &fileName)
{
curFile = fileName;
textEdit->document()->setModified(false);
setWindowModified(false);
QString shownName;
if (curFile.isEmpty())
shownName = "untitled.txt";
else
shownName = strippedName(curFile);
setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application")));
}
QString MathoMadaja::strippedName(const QString &fullFileName)
{
return QFileInfo(fullFileName).fileName();
}
/*mathomadaja.cpp Ende*/
Code: Alles auswählen
/*Beeinhaltet die GUI Darstellung,
also hier ist das ganze Interface definiert
*
* Datei: mathomadaja.h Autor: ***** *****
* Datum: 01.05.2008
*
* Historie: Entwicklungsphase, d.h. andauernde Änderungen
*/
#ifndef MATHOMADAJA_H
#define MATHOMADAJA_H
#include "ui_MathoMadaja.h"
#include <QtGui> /*Beeinhaltet ALLE Header von QT
somit muss man sich keine gedanken mehr machen,
ob man einen Header vergessen hat*/
class MathoMadaja : public QMainWindow, public Ui::MathoMadaja{
Q_OBJECT
public:
MathoMadaja (QMainWindow *parent = 0);
~MathoMadaja();
private slots:
void slotBeenden();
void neueDatei();
void Oeffnen();
bool Speichern();
bool Speichern_unter();
void Ueber();
void documentWasModified();
private:
bool maybeSave();
void loadFile(const QString &fileName);
bool saveFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
QString strippedName(const QString &fullFileName);
QTextEdit *textEdit;
QString curFile;
};
#endif
/*mathomadaja.h Ende*/
danke schon mal im vorraus
