PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Programm mit Qt


c++andqt
01.09.2011, 17:28
Hy liebe Communtiy!
Ich habe eine Frage bezüglich ein Programms...
Es ist kein Fehler drinnen, aber ich würde gerne eine Speicherfunction einbauen.
Wäre cool wenn ihr mir alles erklären könntet, da ich auch lernen und nicht nur aptippen möchte ....
INFO: Es soll ein kleines Word werden.:cool:
Hier mal der Code:
Header:

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QMainWindow>
#include <QTextEdit>

class MyWidget : public QMainWindow{

Q_OBJECT
public:
MyWidget(QMainWindow *parent = 0);
QTextEdit* editor;
public slots:
void openFile();
void newFile();
void changeFont();
void changeColor();
void search();



};


#endif // MYWIDGET_H


Die Main:

#include <QApplication>
#include "mywidget.h"


int main (int argc, char *argv[]){
QApplication app(argc,argv);
MyWidget* window = new MyWidget;
window->show();
return app.exec();

}

Und hier wird alles Implementiert:

#include "mywidget.h"
#include <QApplication>
#include <QMessageBox>
#include <QFont>
#include <QFile>
#include <QMenu>
#include <QMenuBar>
#include <QFileDialog>
#include <QFontDialog>
#include <QColorDialog>
#include <QInputDialog>

//Widgets ableiten
MyWidget::MyWidget(QMainWindow *parent):
QMainWindow(parent)
{
editor = new QTextEdit;


//Menü
QMenu *fileMenu = new QMenu(tr("&Datei"), this);
menuBar()->addMenu(fileMenu);
fileMenu->addAction(
tr("&Neu"), this, SLOT(newFile()),
QKeySequence(tr("Ctrl+N","Datei|Neu")));
fileMenu->addAction(
tr("&Oeffnen"),this, SLOT(openFile()),
QKeySequence(tr("Ctrl+O", "Datei|Oeffnen")));
fileMenu->addAction(
tr ("Be&enden"),qApp , SLOT(quit()),
QKeySequence(tr("Ctrl+E", "Datei|Beenden")));



QMenu *workMenu = new QMenu(
tr("&Bearbeiten"),this);
menuBar()->addMenu(workMenu);
workMenu->addAction(
tr("&Suchen"),this,SLOT(search()),
QKeySequence(tr("Ctrl+S", "Bearbeiten|Suchen")));
QMenu *viewMenu = new QMenu(tr("Ansicht"),this);
menuBar()->addMenu(viewMenu);
viewMenu->addAction(
tr("&Schriftart ändern"),this,SLOT(changeFont()),
QKeySequence(
tr("Ctrl+F","Ansicht|Schriftart ändern"))
);
viewMenu->addAction(
tr("S&chriftfrabe ändern"),this,
SLOT(changeColor()),
QKeySequence(
tr("Ctrl+C","Ansicht|Schriftfarbe ändern")));
setCentralWidget(editor);
setWindowTitle("pcandvideofreak");
}

//Datei öffnen und anzeigen
void MyWidget::openFile(){
QString fileName;
fileName = QFileDialog::getOpenFileName(
this, tr("Datei öffnen"),"",
"C++ Datei (*.cpp *.h);;"
"Text-Datei (*.txt )");
if(!fileName.isEmpty()){
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text))
editor->setPlainText(file.readAll());
}


}

//Löschen
void MyWidget::newFile(){
editor->clear();
}

//Sschriftart
void MyWidget::changeFont(){
editor->setFont(QFontDialog::getFont(0,editor->font()));
}

//Ändern der Farbe
void MyWidget::changeColor(){
editor->setTextColor(QColorDialog::getColor());
}

//Reihenfolge
void MyWidget::search(){
bool ok;
QString text = QInputDialog::getText(
this, "Suchdialog","Text zur Suche eingeben:",
QLineEdit::Normal,"Suche eingeben", &ok );
if (ok && !text.isEmpty())
editor->find(text);

}


Rushh0ur
01.09.2011, 23:20
Naja als erstes solltest du ein Speichern-Funktion defineren und schliesslich einen "MenuEintrag" Speichern hinzufügen.


Funktion saveFile (o.ä) in der Headerdatei deklarieren
Entsprechenden Funktionsrumpf in der Maindatei definieren
Menuelemente "Speichern" (o.ä) in der Maindatei definieren und mit der entsprechenden Funktion verknüpfen
Die Speicher Funktion ausarbeiten
-> Datei zum schreiben öffnen, bzw. neu erstellen
-> Text aus dem Editor-Element in ein String herausziehen und schliesslich diesen in die Datei schreiben


Mfg Rushh0ur

c++andqt
04.09.2011, 22:24
Danke !

c++andqt
04.09.2011, 22:29
Naja , mal schauen , ein Freund von mir erklärt mir einmal Klassen...
Wäre cool wenn du mir vielleicht was erklären könntest,...

Rushh0ur
04.09.2011, 23:36
Naja meiner Meinung nach würde es nicht viel bringen dir was zu erklären, da du dir anscheinend gar keine gedanken über die Problemstelleng machst, zumindest kann man dies nicht rauslesen.

Tu doch dir und den Leuten einen gefallen in dem du einfach mal die Grundlagen selbert aufarbeitest und versuchst dein vorhaben hier drauf zu übertragen, ich meien du hast ja geschrieben das du es selbert lernen möchtest.

Wenn man meinen Punkten folgt:

Funktion saveFile (o.ä) in der Headerdatei deklarieren
Die Antwort:

class MyWidget : public QMainWindow
...
public slots:
void openFile();
void saveFile(); // dekleration der Memberfunktion
...
Entsprechenden Funktionsrumpf in der Maindatei definieren
Die Speicher Funktion ausarbeiten

Die "halbe" Antwort:

...
//Datei speichern
void MyWidget::SaveFile(){
QString fileName;
fileName = QFileDialog::getSaveFileName(
this, tr("Datei speichern"),"",
"C++ Datei (*.cpp *.h);;"
"Text-Datei (*.txt )");

if(!fileName.isEmpty())
{
QFile file(fileName);
if (file.open(QIODevice::Truncate | QFile::WritteOnly | QFile::Text)) Datei erstellen und öffnen bzw. überschreiben
{
// ... Daten Speichern
// kannst dich ja erkundigen wie das geht
}
}
}
...



Menuelemente "Speichern" (o.ä) in der Maindatei definieren und mit der entsprechenden Funktion verknüpfen

->

...
fileMenu->addAction(
tr("&Oeffnen"),this, SLOT(openFile()),
QKeySequence(tr("Ctrl+O", "Datei|Oeffnen")));
fileMenu->addAction(
tr("&Speichern"),this, SLOT(saveFile()),
QKeySequence(tr("Ctrl+S", "Datei|Speichern")));
...



Ich hoffe das helft dir etwas die zussamenhänge zu verstehen.

Mfg Rushh0ur

c++andqt
06.09.2011, 23:20
#include "mywidget.h"
#include <QApplication>
#include <QMessageBox>
#include <QFont>
#include <QFile>
#include <QMenu>
#include <QMenuBar>
#include <QFileDialog>
#include <QFontDialog>
#include <QColorDialog>
#include <QInputDialog>
#include <QTextStream>


//Widgets ableiten
MyWidget::MyWidget(QMainWindow *parent):
QMainWindow(parent)
{
editor = new QTextEdit;


//Menü
QMenu *fileMenu = new QMenu(tr("&Datei"), this);
menuBar()->addMenu(fileMenu);
fileMenu->addAction(
tr("&Neu"), this, SLOT(newFile()),
QKeySequence(tr("Ctrl+N","Datei|Neu")));
fileMenu->addAction(
tr("&Oeffnen"),this, SLOT(openFile()),
QKeySequence(tr("Ctrl+O", "Datei|Oeffnen")));
fileMenu->addAction(
tr ("Be&enden"),qApp , SLOT(quit()),
QKeySequence(tr("Ctrl+E", "Datei|Beenden")));
fileMenu->addAction(
tr ("Speichern"),this,SLOT(saveFile()),
QKeySequence(tr("Ctrl+1","Datei|Speichern")));




QMenu *workMenu = new QMenu(
tr("&Bearbeiten"),this);
menuBar()->addMenu(workMenu);
workMenu->addAction(
tr("&Suchen"),this,SLOT(search()),
QKeySequence(tr("Ctrl+S", "Bearbeiten|Suchen")));
QMenu *viewMenu = new QMenu(tr("Ansicht"),this);
menuBar()->addMenu(viewMenu);
viewMenu->addAction(
tr("&Schriftart ändern"),this,SLOT(changeFont()),
QKeySequence(
tr("Ctrl+F","Ansicht|Schriftart ändern"))
);
viewMenu->addAction(
tr("S&chriftfrabe ändern"),this,
SLOT(changeColor()),
QKeySequence(
tr("Ctrl+C","Ansicht|Schriftfarbe ändern")));
setCentralWidget(editor);
setWindowTitle("note:editor");

}


//Datei öffnen und anzeigen
void MyWidget::openFile(){
QString fileName;
fileName = QFileDialog::getOpenFileName(
this, tr("Datei öffnen"),"",
"C++ Datei (*.cpp *.h);;"
"Text-Datei (*.txt )");
if(!fileName.isEmpty()){
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text))
editor->setPlainText(file.readAll());
setWindowTitle(fileName);
}


}

//Löschen
void MyWidget::newFile(){
editor->clear();
}

//Sschriftart
void MyWidget::changeFont(){
editor->setFont(QFontDialog::getFont(0,editor->font()));
}

//Ändern der Farbe
void MyWidget::changeColor(){
editor->setTextColor(QColorDialog::getColor());
}





//Speichern des Textes
void MyWidget::saveFile(){
QString fileName=QFileDialog::getSaveFileName(this);
if (fileName.isEmpty())
return;
if(QFile::exists(fileName)){
QString bakName = fileName;
bakName.append("~bak");
QFile::copy(fileName, bakName);
}
QFile file(fileName);
if (!file.open(
QIODevice::WriteOnly |QIODevice::Text )){
QMessageBox::warning(
this, tr("Fehler beim öffnen"),
tr("Datei nicht in Datei schreiben %1:\n%2.")
.arg(fileName).arg(file.errorString()));
return;
}


file.write ((editor->toPlainText()).toAscii());
satusBox()->showMessage(
tr("Datei erfolgreich gespeichert"));
setWindowTitle(fileName);

}







//Reihenfolge
void MyWidget::search(){
bool ok;
QString text = QInputDialog::getText(
this, "Suchdialog","Text zur Suche eingeben:",
QLineEdit::Normal,"Suche eingeben", &ok );
if (ok && !text.isEmpty())
editor->find(text);

}


















Tja, jz hab ich das Problem:C:\Qt\qtcreator-2.2.1\text-build-desktop\..\text\implement.cpp:123: Fehler:'satusBox' was not declared in this scope

Rushh0ur
07.09.2011, 20:23
'satusBox' was not declared in this scope
Fehler:'satusBox' wurde in diesem Bereich nicht deklariert, heisst so viel wie diesen Asdruck gibt es nicht.

-> Groß-/ Kleinschreibung beachten
Vl. statusBox ? Vorrausetzung ein Element mit dem Namen statusBox exestiert.

Mfg Rushh0ur