#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
inQRect([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 Если это есть в документах (я поместил ссылку в качестве ссылки), но там нет примера, возможно, если вы опубликуете проблему в репозитории, добавьте ее в будущем