做搜索功能时,需要提前准备一个列表,将输入的元素在列表中进行内容比对。
搜索框可以使用QLineEdit制作。
QLineEdit具有信号“&QLineEdit::textChanged”能够实时监测输入内容的变化。
搜索到的所有元素可以使用QListView显示出来
QListView *ssdml=nullptr;
QVector<QString> sygn={};
QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setGeometry(10,40,230,25);
lineEdit->setStyleSheet("QLineEdit{ background-color:rgb(255,255,255);border:1px groove gray;border-radius:5px;border-style: outset;}");
connect(lineEdit, &QLineEdit::textChanged, this, [this, lineEdit]() {
qDebug() << "Text changed: " << lineEdit->text();
QVector<QString> ssdnr={};
QVector<int> ssdwz={};
if(lineEdit->text()!=""){
for (int i = 0; i < sygn.size(); ++i) {
if (sygn[i].contains(lineEdit->text())) {
qDebug() << "在位置 " << i << " 找到包含内容的元素: " << sygn[i];
ssdnr.append(sygn[i]);
ssdwz.append(i);
}
}
}
if(ssdml!=nullptr){
ssdml->setVisible(false);
}
if(ssdnr.isEmpty()){
ssdml=nullptr;
}
else{
QListView *ssdml=new QListView(this);
ssdml->setGeometry(10,65,230,40*ssdnr.length()+8);
ssdml->setStyleSheet(" QListView { border:1px groove gray; border-radius:10px;padding:2px 4px;border-style: outset; }"
" QListView::item { background-color: rgb(255, 255, 255); }"
" QListView::item:hover { background-color: rgb(235, 235, 235); }"
" QListView::item:selected { background-color: rgb(220, 220, 220); }"
" QListView::item { height: 40px; font-size: 20px; }");
QStandardItemModel *model1 = new QStandardItemModel(this);
ssdml->setModel(model1);
for(int i=0;i<ssdnr.size();i++){
QStandardItem *item1 = new QStandardItem(ssdnr[i]);
model1->appendRow(item1);
}
// 连接信号槽
connect(ssdml->selectionModel(), &QItemSelectionModel::currentRowChanged,
this, &MainWindow::ssmlgb);
ssdml->setVisible(true);
ssdml->show();
}
});