【发布时间】:2019-12-12 10:38:30
【问题描述】:
我有表格小部件,其中一列需要文本自动补全。
每次用户请求新行时,我都会为该列运行此代码:
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 行之间崩溃。但我不知道我做错了什么。
【问题讨论】:
-
第 6 行和第 7 行在哪里???