QRegExp ничему не соответствует

#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);
....