我之前使用过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。