写了一个槽函数,实现这样的功能,如图:
上面是一个 lineEdit,下面是一个listWidget。当我在lineEdit输入文字时,在listWidget中能根据输入检索到相关项,并显示。
刚开始的时候,我是这样做的
这样做的结果就是程序执行到 ui->listWidget->addItem(item);
程序会出现错误,然后挂掉!
后来发现了原因:
因为 QList<QListWidgetItem *> list;
这个list只是一个指针,指向listWidget里的项
如果ui->listWidget->clear();
那么list里的那些item就毁掉了。
这时候调用ui->listWidget->addItem(item); 当然会挂掉。
这个list只是一个指针,指向listWidget里的项
如果ui->listWidget->clear();
那么list里的那些item就毁掉了。
然后我做了改进
void Dialog::searchListWidgetItem(QString str)
{
ui->listWidget->clear();
QStringList wordList;
wordList << "alpha" << "omega" << "omicron" << "zeta"<<"aa"<<"bb"<<"cc";
ui->listWidget->addItems(wordList);
QList<QListWidgetItem *> list;
list = ui->listWidget->findItems(str,Qt::MatchStartsWith);
//若,str == "" findItems函数 能返回全部项
QStringList strList;
if(!list.isEmpty())
{
for(int i=0;i<list.length();i++)
{
strList<<list.at(i)->text();
}
ui->listWidget->clear();
for(int i =0;i<strList.length();i++)
{
ui->listWidget->addItem(strList.at(i));
}
}
else
{
ui->lineEdit->backspace(); //当查询不到时backspace
qApp->beep(); // 警报
}
}
总算是顺利完成。