#c #regex #qt #qt5 #qregexp
#c #регулярное выражение #qt #qt5 #qregexp
Вопрос:
У меня есть приложение, созданное другим человеком, и мне нужно это исправить. В представлении есть диаграмма и текстовое поле для фильтрации диаграммы, но фильтр не работает. По какой-то причине QRegExp ничего не может найти.
Я использую QT5.12.1 и VS2015.
void ChartWidget::filterSeriesByName(QString name) {
// QString text=ui.lineEditFilterByName->text();
QRegExp regExp(name, Qt::CaseSensitive);
proxyModel->setFilterRegExp(regExp);
setFilterLabel();
foreach (QLegendMarker* marker, chart->legend()->markers())
{
if(regExp.isEmpty() || regExp.exactMatch(marker->series()->name())) {
setMarkerVisible(marker,true,true);
}
else {
setMarkerVisible(marker,true,false);
}
}
}
void ChartWidget::setFilterLabel() {
//resetVerticalHeader();
QString filteredCount = QString::number(proxyModel->rowCount()).append(" / ");
filteredCount.append(QString::number(model->rowCount()));
filteredCount.append(" kayıt gösteriliyor");
ui.labelFilter->setText(filteredCount);
QFont font = ui.labelFilter->font();
if (proxyModel->rowCount() != model->rowCount()) {
ui.labelFilter->setForegroundRole(QPalette::Link);
font.setStyle(QFont::StyleItalic);
ui.labelFilter->setFont(font);
} else {
ui.labelFilter->setForegroundRole(QPalette::WindowText);
font.setStyle(QFont::StyleNormal);
ui.labelFilter->setFont(font);
}
}
Комментарии:
1. Какие символы
name
содержит? Если есть какие-либо специальные символы, такие как(
или[
, регулярное выражение может работать не так, как ожидалось.2. Это обычная строка, введенная в текстовое поле. Например, ввод названий стран для фильтрации диаграммы. Таким образом,
name
таким образом, например, было бы «Brazil»
Ответ №1:
У меня была несколько похожая штука, и это сработало, когда я добавил регулярное выражение в параметр QString. Попробуйте это:
....
QString filterStr = "^.*" name ".*$";
QRegExp regExp(filterStr);
....