Qt MainWindow在点击按钮时崩溃

时间:2014-05-13 14:08:00

标签: c++ qt user-interface

我之前使用过Qt的MainWindow课程,我从未遇到过任何问题。 现在,我有一个名为addLocation的按钮,用于创建QInputDialog并从用户处获取字符串,并将其添加到名为QStringList的{​​{1}},其中是我的locationList文件的公共字段,在标题中声明如下:

uiactions.h

我的class UiActions{ public: QStringList locationList; //function prototypes }; 文件中有一个函数来处理点击mainwindow.cpp按钮的事件,定义如下:

addLocation

我的void MainWindow::on_addLocation_clicked() { UiActions actions; actions.addLocation(); } 函数在我的addLocation文件中定义如下:

uiactions.cpp

每当我点击void UiActions::addLocation() { bool j; //Input Dialog Handler QDebug debugTxt(QtDebugMsg); locationList << QInputDialog::getText(NULL, "Add Location", "Location Name:", QLineEdit::Normal, NULL, &j); } 按钮时,程序会显示一个输入对话框,让我输入内容,然后挂起几秒钟,然后在点击“确定”后崩溃。

我在输入对话框下添加了一些行,以查看问题是否在addLocation中,如下所示:

QInputDialog

它会将“输入对话框成功”打印到调试控制台,告诉我问题不在于我使用if(j){ debugTxt << "Input dialog success"; } else{ debugTxt << "Input failed."; }

当它崩溃时,这是我得到的所有错误信息:

QInputDialog

我相信这是所有相关信息。什么会导致程序崩溃?

编辑:我使用调试器运行(应该先完成此操作)并且我遇到了分段错误。我想知道是什么原因造成的,因为我没有做任何指针诡计。我怀疑它与我使用The program has unexpectedly finished. [insert path to EXE here] crashed

的方式有关

突出显示的程序集为QStringList locationList

编辑2 :我对我的0x64942cb6 <+0x0000> cmpl $0xbab1f00d,(%edx)文件中的addLocation按钮的click事件进行了修改。

mainwindow.cpp

当我尝试向uiactions.h文件中的QStringList字段添加内容时,我得到了同样的错误。我几乎肯定我现在正试图在那里错误地访问数据。这是有趣的事情。我有另一个按钮,用于将void MainWindow::on_addLocation_clicked() { UiActions actions; //actions.addLocation(); actions.locationList << "Test Location" << "Other Data"; } 中的数据保存到文本文件中,在我的locationList文件中定义如下:

uiactions.cpp

工作正常。

编辑3 :我在bool UiActions::saveLocationList() { ofstream file; file.open ("Location List.txt"); for(int i = 0;i < locationList.size(); i++){ file << locationList[i].toUtf8().data() << "\n"; } file.close(); return true; } 点击事件中添加了一个调试行:debugTxt << "\n" << locationList[0];,以查看数据是否实际投放到addLocation,并且它是。我现在完全糊涂了,因为我似乎正在正确访问locationList。

0 个答案:

没有答案