Я новичок в Qt. Я хочу проверить входное значение QLineEdit: если вход начинается с пробела, поверните цвет шрифта в черный, иначе сделайте его красным. Но это не работает.Qt QRegExp с пробелами не работает
Вот код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
QRegExp regexp("^\s*");
if(!regexp.exactMatch(arg1))
{
ui->lineEdit->setStyleSheet("color:red");
} else
{
ui->lineEdit->setStyleSheet("color:black");
}
}
Так что, когда я запускаю этот код и начать с пространством, оно становится красным, я не могу понять, почему это произошло.
ОБНОВЛЕНО ВОПРОС
Вот что я думаю: Если я хочу, чтобы пометить красным цветом, когда вход не цифра, то RegExp хотел бы это:
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
QRegExp regexp("^[0-9]*");
if(regexp.exactMatch(arg1)) {
ui->lineEdit->setStyleSheet("color:black");//if the input is digits,black
} else {
ui->lineEdit->setStyleSheet("color:red");//not digits,red
}
}
И это работает, как я разыскивается . Но когда я добавляю \s
в RegExp (QRegExp regexp("^\s[0-9]*")
), цифры начинаются с пробелов или чистых цифр, которые становятся красными. Почему это?
Прежде всего, вы можете использовать \ S (обратите внимание на крышку), чтобы соответствовать символу. Кроме того, проверьте двойное отрицание в своей логике. Предположим, что 'A' is 'arg1 начинается с пробела'. Затем ваш регулярный поиск ищет совпадение «не A». И тогда вы отменяете логическое значение точного соответствия (т. Е. «!»), Что означает, что вы проверяете «не A», другими словами, для «A». Поэтому текущая логика ставит строки, начинающиеся с пробела в красном, в противном случае - в черном. – Bettorun
Спасибо за вашу помощь. Но я думаю, что это не так, я изменил код на: QRegExp regexp ("^ \ s *"); если (regexp.exactMatch (arg1)) { ui-> lineEdit-> setStyleSheet ("цвет: черный"); } else { ui-> lineEdit-> setStyleSheet ("цвет: красный"); } все еще не работает, когда ввод представляет собой несколько пробелов "", например, цвет шрифта lineedit по-прежнему остается красным. –
Я вижу, где я ошибся, я должен использовать «\\ s» insteal из «\ s», спасибо за вашу помощь! –