QCompleter set模型使应用程序崩溃
QCompleter setModel crashes application
我有表格小部件,其中一列需要具有文本自动填充。
每次用户请求新行时,我都会为该列运行以下代码:
else if (i == COLUMN_DESCRIPICION){
QLineEdit *le = new QLineEdit(this);
QStringList list = dbManager.getProductListStringsOnly();
QCompleter *completer = new QCompleter(list,le);
completer->setCaseSensitivity(Qt::CaseInsensitive);
completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
le->setCompleter(completer);
ui->twReceiptItems->setCellWidget(rowindex,i,le);
}
目前为止,一切都好。现在,用户可能需要向系统输入新项目。如果他这样做,那么该项目也需要在现有行列表中。因此,要更新QCompleter单词列表,我运行以下命令:
void MainView::updateProductList(){
if (ui->twReceiptItems->rowCount() == 0) return;
QStringList list = dbManager.getProductListStringsOnly();
for (qint32 i = 0; i < ui->twReceiptItems->rowCount(); i++){
qDebug() << 1;
QLineEdit *le = static_cast<QLineEdit*>(ui->twReceiptItems->cellWidget(i,COLUMN_DESCRIPICION));
qDebug() << 2 << (le == nullptr);
QCompleter *completer = le->completer();
qDebug() << 3 << (completer == nullptr);
QStringListModel *model = static_cast<QStringListModel*>(completer->model());
qDebug() << 4 << (model == nullptr);
if (model == nullptr) model = new QStringListModel();
qDebug() << 5 << (model == nullptr);
model->setStringList(list);
qDebug() << 6;
completer->setModel(model);
qDebug() << 7;
le->setCompleter(completer);
qDebug() << 8;
}
}
程序在 qDebug 第 6 行和第 7 行之间崩溃。但我无法弄清楚我做错了什么。
您正在尝试使用指向其当前模型的指针替换完成器模型。当您调用setModel
时,将调用当前对象的删除,并且它恰好与您尝试设置为新对象的同一对象。
在这里,您可以设置指向当前模型的指针:
QStringListModel *model = static_cast<QStringListModel*>(completer->model());
在这里你把它放回去:
completer->setModel(model);
只需使用一个新的,即
completer->setModel(new QStringListModel(list));
或者,甚至更好
le.completer()->setModel(new QStringListModel(list));
只是一个脚注:不要使用static_cast
进行向上投射。C++有一个特定的演员阵容,dynamic_cast
,Qt甚至qobject_cast
QObject衍生物。
相关文章:
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- QCompleter set模型使应用程序崩溃
- Qt 5 应用程序崩溃并出现"qLineEdit::setText"
- 切换NvAPI_Stereo_Deactivate/NvAPI_Stereo_activate会使unity应用程序崩溃
- eglSwapBuffers上的应用程序崩溃
- VLD 使应用程序崩溃
- 由于调用 std::condition_variable 后参数无效而导致应用程序崩溃
- 执行递归函数时 C++ 应用程序崩溃
- 在 C++/CLI/C# 项目中启用"Native Code Debugging"导致应用程序崩溃
- LOCAL_SHARED_LIBRARIES使我的应用程序崩溃
- 为什么使用 nullPtr 调用函数不会使我的应用程序崩溃
- 当删除上下文属性中的QLIST对象时,QT QML应用程序崩溃
- React 本机 0.59 应用程序崩溃并出现 libc 错误
- 当使用“制造”编译的程序中使用库时,应用程序崩溃
- 如何在导致应用程序崩溃的代码中修复指令
- C++多线程应用程序崩溃
- 当使用 /ENTRY:main 和 /MT 运行时库编译为 /SUBSYSTEM:WINDOWS 时,应用程序崩溃