Access to the user interface
-
Okey ... how can I solve the problem ?
I can't delete @Data * MyData = new Data(this);@
But also not the declaration in fhxnn.h .. -
What about just:
@MyData = new Data(this);@
?
-
Oh yes .. I've been a bit tired ^^
-
But it still wont open the files ... there's no error or something like that, but the stream soen't write it's data into the member variables
-
Are you sure you are reading the data correctly ?
-
no ... I only meant that the compiler don't find a compile error, of course there have to be an error, if not it would work.
DO you have an idea where the error is? :D -
The debugger is your friend ;)
since you wrote it crashes here
@MyFxhnn -> ui -> itsText->clear();@
Are you sure everything is valid ?
-
No that problem is fixed.
Also the debugger doesn't say anything, the only problem is, that the function openContent() doesn't write the data into itsContent ..@bool Data::openContent(){
QString fileName = QFileDialog::getOpenFileName(MyFxhnn, tr("Inhalt öffnen"), QString(),
tr("Fxhnn Content Files (*.FXHNNCON)"));
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::critical(MyFxhnn, tr("Error"), tr("Could not open file"));
return false;
}
QTextStream in(&file);
in >> itsContent;
printItsContent();
file.close();if(itsContent != MyFxhnn -> ui -> itsText -> toPlainText()){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Fehler beim Öffnen, Data != Textfeld")); return false; } return true;
}@
Leon
-
From your code, I wouldn't expect openContent to write anything. You open the selected file in ReadOnly mode and you read from it after that.
-
yea I meant that the function has to "write" the data from the stream into the variable ... but I don't know, where there should be the bug :/
-
Ok, so you mean that "itsContent" doesn't receive the content of the file ?
Following your code printItsContent just clears the itsText widget content so when you compare the content of itsText to itsContent's value, your test will only succeed if itsContent is empty.
-
I've changed that ... a few days ago :D
I'll post the new code .. :
data.h
@#ifndef DATA_H
#define DATA_H#include <QWidget>
#include "fxhnn.h"
#include "ui_fxhnn.h"
#include <cstdlib>
#include <limits.h>
#include <QString>
#include <QFileDialog>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>
#include <QDataStream>class Fxhnn;
class Data : public QWidget
{
Q_OBJECTFxhnn *MyFxhnn;
public:
explicit Data(Fxhnn*);
~Data();//Zugriffe auf den Inhalt QString getItsContent(); void printItsContent(); void setItsContent( QString newContent); void readItsContent(); void reset(); //Speichern der Daten bool saveKeyAndMeta(bool customFileName = 0); bool openKeyAndMeta(bool customFileName = 0); bool saveContent(bool customFileName = 0); bool openContent(bool customFileName = 0); bool saveAll(bool customFileName = 0); bool openAll(bool customFileName = 0);
signals:
private:
qint64 itsKey;
QString itsContent;
ushort itsShuffleLevel;
ushort itsEncryptLevel;
QString itsKeyFilename;
QString itsContentFilename;
};#endif // DATA_H
@data.cpp:
@#include "data.h"Data::Data(Fxhnn * pFxhnn) : MyFxhnn(pFxhnn),itsEncryptLevel(0), itsShuffleLevel(0)
{
itsKey = rand() % LONG_MAX;
setItsEncryptLevel(0);
}Data::~Data()
{}
//Zugriffe auf itsContent
void Data::printItsContent(){
MyFxhnn -> ui -> itsText->clear();
MyFxhnn -> ui -> itsText -> setPlainText(itsContent);
setItsEncryptLevel(0);
setItsShuffleLevel(0);
return;
}void Data::setItsContent(QString newContent){
itsContent = newContent;
return;
}void Data::readItsContent(){
itsContent = MyFxhnn -> ui -> itsText -> toPlainText();
return;
}//Zugriffe auf itsKey
qint64 Data::getItsKey(){
return itsKey;
}void Data::setItsKey(qint64 newKey){
itsKey = newKey;
return;
}void Data::generateItsKey(){
itsKey = rand() % USHRT_MAX;
return;
}//Zugriffe auf das Level der Verschlüsslung
void Data::setItsEncryptLevel( short upDownGrade){
itsEncryptLevel = itsEncryptLevel + upDownGrade;if(itsEncryptLevel <= 0){ MyFxhnn -> ui -> itsIsEncrypted -> setText("Decrypted"); MyFxhnn -> ui -> itsIsEncrypted -> setStyleSheet("QLabel {color : #CC0304; }"); } else{ if(itsEncryptLevel > 0){ QString Out = "Encrypt Level "; Out.append(QString("%1").arg(itsEncryptLevel)); MyFxhnn -> ui-> itsIsEncrypted-> setText(Out); } else MyFxhnn -> ui -> itsIsEncrypted -> setText("Encrypted"); MyFxhnn -> ui -> itsIsEncrypted -> setStyleSheet("QLabel {color : #4ECC39; }"); }
}
ushort Data::getItsEncryptLevel(){
return itsEncryptLevel;
}//Daten Speichern und öffnen
bool Data::saveKeyAndMeta(bool customFileName){
if(itsKeyFilename.isEmpty() || customFileName)
itsKeyFilename = QFileDialog::getSaveFileName(MyFxhnn, tr("Schlüssel Speichern"), QString(), tr("Fxhnn Key Files (*.FXHNNKEY)"));
if(!itsKeyFilename.isEmpty()){
QFile file(itsKeyFilename);
if(!file.open(QIODevice::WriteOnly)){
QMessageBox::critical(0, tr("Error"), tr("Could not save key"));
return false;
}
QDataStream stream(&file);
stream << itsKey << itsEncryptLevel << itsShuffleLevel;
file.close();
}
return true;
}bool Data::saveContent(bool customFileName){
if(itsContentFilename.isEmpty() || customFileName)
itsContentFilename = QFileDialog::getSaveFileName(0, tr("Text Speichern"), QString(), tr("Fxhnn Content Files (*.txt)"));if(!itsContentFilename.isEmpty()){ QFile file(itsContentFilename); if(!file.open(QIODevice::WriteOnly)){ QMessageBox::critical(0, tr("Error"), tr("Could not save file")); return false; } QTextStream stream(&file); stream << itsContent; file.close(); } return true;
}
bool Data::saveAll(bool customFileName){
bool content = saveContent(customFileName);
bool keyAndMeta = saveKeyAndMeta(customFileName);if(content && keyAndMeta) return true; return false;
}
bool Data::openKeyAndMeta( bool customFileName){
if(itsKeyFilename.isEmpty() || customFileName )
itsKeyFilename = QFileDialog::getOpenFileName(0, tr("Schlüssel Öffnen"), QString(), tr("Fxhnn Key Files (*.FXHNNKEY)"));
if(!itsKeyFilename.isEmpty()){
QFile file(itsKeyFilename);
if(!file.open(QIODevice::ReadOnly)){
QMessageBox::critical(0, tr("Error"), tr("Could not open file"));
return false;
}
QDataStream in(&file);
in >> itsKey >> itsEncryptLevel >> itsShuffleLevel;
file.close();
printItsContent();
}
return true;
}bool Data::openContent(bool customFileName){
if(itsContentFilename.isEmpty() || customFileName)
itsContentFilename= QFileDialog::getOpenFileName(MyFxhnn, tr("Inhalt öffnen"), QString(), tr("Fxhnn Content Files (*.txt)"));if(!itsContentFilename.isEmpty()){ QFile file(itsContentFilename); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Could not open file")); return false; } QTextStream in(&file); setItsContent(in.readAll()); printItsContent(); file.close(); if((itsContent != MyFxhnn -> ui -> itsText -> toPlainText()) || itsContent == ""){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Fehler beim Öffnen, Data != Textfeld")); return false; } } return true;
}
bool Data::openAll(bool customFileName){
bool content = openContent(customFileName);
bool keyAndMeta = openKeyAndMeta(customFileName);if(content && keyAndMeta) return true; return false;
}
@ -
So is it working as you expect it to ?
-
No it isn't ... it still have the problem that it couldn't read the data from the files.
-
Rather than
@
QTextStream in(&file);
setItsContent(in.readAll());@Why not just:
@
setItsContent(file.readAll());
@In any case, are you sure that your file is not empty ?
-
That doesn't work... And the file isn't empty
-
Did you check what file.readAll() contains ?
since setItsContent only assign the parameter value to your itsContent member variable why not just do:
@itsContent = file.readAll()@
?
By the way, you should use const QString& in your setItsContent function, that will avoid unnecessary copies.
-
Okey ehm file.readAll() return the right content of the file, the problem is, that it doesn't convert it into QString. readAll() gives back a QByteArray wich normaly could be converted in QString with for example:
@itsContent = QString(file.readAll());@But it doesn't ...
here is the function again:
@bool Data::openContent(bool customFileName){
if(itsContentFilename.isEmpty() || customFileName)
itsContentFilename= QFileDialog::getOpenFileName(MyFxhnn, tr("Inhalt öffnen"), QString(), tr("Fxhnn Content Files (*.txt)"));if(!itsContentFilename.isEmpty()){ QFile file(itsContentFilename); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Could not open file")); return false; } QTextStream in(&file); QMessageBox::information(MyFxhnn, "Content of readAll(", file.readAll()); itsContent = QString(file.readAll()); QMessageBox::information(MyFxhnn, "Content of itsContent", QString(file.readAll())); printItsContent(); file.close(); if((itsContent != MyFxhnn -> ui -> itsText -> toPlainText()) || itsContent == ""){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Fehler beim Öffnen, Data != Textfeld")); return false; } } return true;
}@
The Message "Content of readAll()" gives back the right content the other message return nothing an the last error message appears.
-
Now it's working a 'bit'.
It is able to read the file and print it into the output, BUT it doesn't save onicode ... and I need unicode so we have to find an other solution :/ :D -
Now it's working a 'bit'.
It is able to read the file and print it into the output, BUT it doesn't save onicode ... and I need unicode so we have to find an other solution :/ :D
@bool Data::openContent(bool customFileName){
if(itsContentFilename.isEmpty() || customFileName)
itsContentFilename= QFileDialog::getOpenFileName(MyFxhnn, tr("Inhalt öffnen"), QString(), tr("Fxhnn Content Files (*.txt)"));if(!itsContentFilename.isEmpty()){ QFile file(itsContentFilename); if(!file.open(QIODevice::ReadOnly)){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Could not open file")); return false; } //QTextStream in(&file); //QMessageBox::information(MyFxhnn, "Inhalt von readAll()", file.readAll()); QByteArray tempString = file.readAll(); itsContent = tempString; QMessageBox::information(MyFxhnn, "Inhalt von itsContent", itsContent); printItsContent(); file.close(); if((itsContent != MyFxhnn -> ui -> itsText -> toPlainText()) || itsContent == ""){ QMessageBox::critical(MyFxhnn, tr("Error"), tr("Fehler beim Öffnen, Data != Textfeld")); return false; } } return true;
}@
and here are the printItsContent():
@void Data::printItsContent(){
//MyFxhnn -> ui -> itsText->clear(); <- If I uncomment this line it clear the output text, but it can't set it again
MyFxhnn -> ui -> itsText -> setPlainText(itsContent);
setItsEncryptLevel(0);
setItsShuffleLevel(0);
return;
}@