Save object to a file
-
Run your application through the debugger, it will tell you where the crash occurs
-
wrote on 14 Aug 2013, 06:56 last edited by
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 ? -
wrote on 14 Aug 2013, 07:19 last edited by
I have a print screen, how do I post a pic on here?
-
You have to use a picture hosting service or a public dropbox folder etc...
-
wrote on 14 Aug 2013, 07:43 last edited by
-
wrote on 14 Aug 2013, 07:44 last edited by
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.
-
wrote on 14 Aug 2013, 08:19 last edited by
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
-
wrote on 14 Aug 2013, 09:15 last edited by
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().
-
wrote on 14 Aug 2013, 09:23 last edited by
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.
-
wrote on 14 Aug 2013, 09:32 last edited by
ca you give me the line QString fileName = QFileDialog::getSaveFileName();
because I don't know what's wrong here? -
Just call
@
QString fileName = QFileDialog()::getSaveFileName(0, tr("Save File..."));
@Please, check the documentation
-
wrote on 14 Aug 2013, 09:42 last edited by
thank you very much I did try that but it also didn't work...Needed to change the 'this' for the QMessageBox also. Can I just ask why would pointing to this(itself) be the wrong thing to do?
-
Because FilmWriter is not a widget.
And while you where inheriting QWidget, you never initialized it properly
29/37