Регулярное выражение Qt в QRect

#c #regex #qt #qml

#c #регулярное выражение #qt #qml

Вопрос:

У меня есть QRect, который я пытаюсь отфильтровать в qml с помощью RegExpFilter QRect (1220,50, 500, 300)

Я хочу сопоставить их вот так: QRect([0-2000], [0-500], *, *)

 SortFilterProxyModel
{
    onCountChanged: listView.recalculate()
    id: proxyModel
    sourceModel: m_sourceModel
    filters: [
        RegExpFilter {
            enabled: true 
            roleName: "myQRectRole"

            pattern: ????
        }
    ]
}
  

Я застрял, поскольку это QRect, возможно ли это вообще?

(с использованием SortFilterProxyModel и RegExpFilter)

Комментарии:

1. в чем смысл QRect([0-2000], [0-500], *, *) ? регулярные выражения применяются к строкам

2. Операция означает сопоставление чего-либо для аргументов 3 и 4 QRect (т. Е. ширины / высоты)

3. @AdrienLeravat точно

4. @user215853 Итак, 0-2000 in QRect([0-2000], [0-500], *, *) означает, что x находится между 0 <= x <= 2000 ?

5. @eyllanesc QRect определяется как QRect (x, y, width , height) позиция x должна быть в диапазоне от 0-2000 до y 0-500, поскольку widht и height соответствуют любому

Ответ №1:

RegExpFilter служит только для фильтрации строк, в вашем случае это не так. Решение заключается в использовании ExpressionFilter:

 SortFilterProxyModel {
    id: proxyModel
    sourceModel: m_sourceModel
    filters: [
        ExpressionFilter{
            //  QRect([0-2000], [0-500], *, *)
            expression: (model.myQRectRole.x >= 0 amp;amp; model.myQRectRole.x <= 2000) amp;amp; (model.myQRectRole.y >= 0 amp;amp; model.myQRectRole.y <= 500)
        }
    ]
}
  

По следующей ссылке приведен пример.

Комментарии:

1. Большое вам спасибо! ExpressionFilter отсутствует в документации. Как только у меня будет достаточная репутация, я проголосую за нее. У вас есть целая куча холодных напитков на ваш выбор.

2. @user215853 Если это есть в документах (я поместил ссылку в качестве ссылки), но там нет примера, возможно, если вы опубликуете проблему в репозитории, добавьте ее в будущем