Save object to a file
-
Yes, it's exactly what I'm saying
-
If you are talking about the saveFilm problem and the message didn't changed, then saveFilm is still not a member of FilmInput.
Isn't it a member of FilmWriter ?
-
-
FilmWriter is a class, how do you call a function from a class ?
-
You create an object and call the function with the object. That's it! Ok so now you have helped me to get rid of that error, thanks a lot. Another question, when I click on the save film button which invokes saveFilm the program crashes, should I start a new thread because this is a new question or can you still help me on this one?
-
Run your application through the debugger, it will tell you where the crash occurs
-
I got this: The inferior stopped because it received a signal from the operating system
signal name: SIGSEGV
Signal meaning: Segmentation fault
then it is pointing to line 2185 in qglobal.h
inline QFlags operator&(Enum f) const { QFlags g; g.i = i & f; return g; } -
What does the stack trace look like ?
The lines under qglobal.h ? -
You have to use a picture hosting service or a public dropbox folder etc...
-
-
https://www.dropbox.com/s/mosnz8o23elipn5/Qtstack.jpg
doesn't work with a space in the name
-
Looks strange... Just to be on the safe side, delete the build directory completely and re-run your application.
-
ok now it doesn't run again with a bunch of errors:
Running build steps for project Ass1Q1...
Configuration unchanged, skipping qmake step.
Starting: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directoryC:/Unisa/COS3711/assignments/Ass1Q1-build-desktop' C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory
C:/Unisa/COS3711/assignments/Ass1Q1-build-desktop'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"........\Qt\2010.04\qt\include\QtCore" -I"........\Qt\2010.04\qt\include\QtGui" -I"........\Qt\2010.04\qt\include" -I"........\Qt\2010.04\qt\include\ActiveQt" -I"debug" -I"." -I"..\Ass1Q1" -I"." -I"........\Qt\2010.04\qt\mkspecs\win32-g++" -o debug\FilmWriter.o ..\Ass1Q1\FilmWriter.cpp
..\Ass1Q1\FilmWriter.cpp: In member function 'void FilmWriter::saveFilm(Film&)':
..\Ass1Q1\FilmWriter.cpp:10: error: no matching function for call to 'QFileDialog::getSaveFileName(FilmWriter* const, const char [10])'
........\Qt\2010.04\qt\include\QtGui/../../src/gui/dialogs/qfiledialog.h:216: note: candidates are: static QString QFileDialog::getSaveFileName(QWidget*, const QString&, const QString&, const QString&, QString*, QFlagsQFileDialog::Option)
..\Ass1Q1\FilmWriter.cpp:14: error: no matching function for call to 'QMessageBox::critical(FilmWriter* const, const char [6], const char [20])'
........\Qt\2010.04\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:202: note: candidates are: static QMessageBox::StandardButton QMessageBox::critical(QWidget*, const QString&, const QString&, QFlagsQMessageBox::StandardButton, QMessageBox::StandardButton)
........\Qt\2010.04\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:262: note: static int QMessageBox::critical(QWidget*, const QString&, const QString&, int, int, int)
........\Qt\2010.04\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:265: note: static int QMessageBox::critical(QWidget*, const QString&, const QString&, const QString&, const QString&, const QString&, int, int)
........\Qt\2010.04\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:272: note: static int QMessageBox::critical(QWidget*, const QString&, const QString&, QMessageBox::StandardButton, QMessageBox::StandardButton)
mingw32-make[1]: Leaving directoryC:/Unisa/COS3711/assignments/Ass1Q1-build-desktop' mingw32-make: Leaving directory
C:/Unisa/COS3711/assignments/Ass1Q1-build-desktop'
mingw32-make[1]: *** [debug/FilmWriter.o] Error 1
mingw32-make: *** [debug] Error 2
The process "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" exited with code %2.
Error while building project Ass1Q1 (target: Desktop)
When executing build step 'Make' -
FilmWriter is not a QWidget, you can't pass it as a parent when you call QFileDialog::getSaveFileName
-
If I make FilmWriter a QWidget the program runs but when I click on the save film button it crashes with: "this application has requested the runtime to terminate it in an unusual way. Please contact the application's support team for more information."
Despite the crash, the program runs without any errors as you can see:
Running build steps for project Ass1Q1...
Configuration unchanged, skipping qmake step.
Starting: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directoryC:/Unisa/COS3711/assignments/Ass1Q1-build-desktop' C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: Entering directory
C:/Unisa/COS3711/assignments/Ass1Q1-build-desktop'
mingw32-make[1]: Nothing to be done forfirst'. mingw32-make[1]: Leaving directory
C:/Unisa/COS3711/assignments/Ass1Q1-build-desktop'
mingw32-make: Leaving directory `C:/Unisa/COS3711/assignments/Ass1Q1-build-desktop'
The process "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" exited normally. -
Because you don't initialize it properly.
Don't make FilmWriter inherit QWidget and don't make it a parent of the QFileDialog, it doesn't make any sense.
For your tests just call QFileDialog::getSaveFileName().
-
ok now I'm confused!?! I am calling getSaveFileNAme
void FilmWriter::saveFilm(Film& f){
QString fileName = QFileDialog::getSaveFileName(this,("Save File"));
if (fileName != "") {
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly)) {
QMessageBox::critical(this, ("Error"),("Could not open file"));// error message
} else {
QTextStream stream(&file);
stream << f.toString();
stream.flush();
file.close();
}
}}
-
change "this" by 0,
FilmWriter is not a QWidget and should not be just for the purpose of giving QFileDialog::getSaveFileName a parent.