Russian Qt Forum
Июнь 02, 2024, 15:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QLineEdit не реагирут на сигнал editingFinished()  (Прочитано 12254 раз)
Evgeniya
Гость
« : Март 16, 2009, 10:47 »

Доброго времени суток всем!!!Есть такой вопросик...
У меня на QLineEdit устаноовлен Validator, так он теперь не реагирут на сигнал editingFinished()...значит, нужно выбирать- либо сигнал, либо валидатор???или это можно как-нить избежать??
Записан
Evgeniya
Гость
« Ответ #1 : Март 16, 2009, 11:35 »

все, я разобралась...он реагирут, только когда набираешь необходимое кол-во символов
Например,
QRegExp regExp("[0-9]{6}");
     exp= new QRegExpValidator(regExp,this);
     ui.PCOD->setValidator(exp);
и тогда сигнал editingFinished() сработает только когда будет набрано 6 символо, а мне нужно чтобы он срабатывал, если меньше набирается... Злой или можно как-нить написать регулярное выражение, не ограничивающее кол-во символов
Записан
Rcus
Гость
« Ответ #2 : Март 16, 2009, 11:37 »

QIntValidator::QIntValidator ( int minimum, int maximum, QObject * parent )
Записан
Evgeniya
Гость
« Ответ #3 : Март 16, 2009, 11:49 »

Пишу
QIntValidator *valint;
valint =new QIntValidator(0,9,this);
ui.PCOD->setValidator(valint);

так он дает только одну цифру написать  Грустный
Записан
Rcus
Гость
« Ответ #4 : Март 16, 2009, 11:50 »

/*sigh*/
new QIntValidator(0, 999999, this);
Записан
Evgeniya
Гость
« Ответ #5 : Март 16, 2009, 11:55 »

Спасибки!!!!!! :)Теперь работает.... Улыбающийся
А вот сдеся
QRegExp regExp_1("[А-Яа-]{255}") можно сделать как-нить неограниченное количество символов вводить??, чтобы тож можно было этот сигнал использовать???
Записан
igor_bogomolov
Гость
« Ответ #6 : Март 16, 2009, 12:08 »

QRegExp regExp("\\d+");
Подайдет?
Записан
Evgeniya
Гость
« Ответ #7 : Март 16, 2009, 13:05 »

Ну практически....мне просто надо неограниченное кол-во определенных символов
получилось так QRegExp regExp("[А-Яа-яЁё' -]+");
Всем спасибо!!!!!! Улыбающийся
Записан
Evgeniya
Гость
« Ответ #8 : Март 16, 2009, 17:04 »

У меня тут еще один вопросик созрел))...
хочу на QLineEdit установить маску ввода, чтобы первый символ был в верхнем регистре, а последующие в нижнем...только их неограниченное кол-во должно быть.Это вообще возможно??
Я делаю пока так ui.lineEdit_2->setInputMask(">X!x"); , но естественно сдеся тока два символа (((
Записан
igor_bogomolov
Гость
« Ответ #9 : Март 16, 2009, 19:16 »

Цитировать
f the line edit has an input mask, the mask defines the maximum string length.
Как вариант, можно сделать через eventFilter. Что-то вроде этого:
Код
C++ (Qt)
bool Client::eventFilter(QObject *target, QEvent *event) {
   if (target == lineEdit && event->type() == QEvent::KeyPress) {
       QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
       QString strkey = keyEvent->text();
       if(lineEdit->text().isEmpty()) {
        lineEdit->setText(strkey.toUpper());
        return true;
       }
   }
   return QObject::eventFilter(target, event);
}
Записан
spirit
Гость
« Ответ #10 : Март 16, 2009, 19:23 »

а зачем так сложно?  Улыбающийся
можно сигнал отлавливать QLineEdit::textEdited
и в слоте-обработчике переводить в верхний регистр и устанавливать текст.  Подмигивающий
Записан
igor_bogomolov
Гость
« Ответ #11 : Март 16, 2009, 19:30 »

Оу. Это я поторопился.
Почему то в сторону сигналов сразу не подумал смотреть.
Наверное слишком много за последнии дни с eventFilter возился Улыбающийся
Записан
Evgeniya
Гость
« Ответ #12 : Март 16, 2009, 21:49 »

Спасибочки ОГРОМНОЕ!!!!! Улыбающийся Улыбающийся Улыбающийся
Получилось с помощью сигнала!!!!!!!!
Записан
Evgeniya
Гость
« Ответ #13 : Март 17, 2009, 09:01 »

У меня получился вот такой вот слот
void DoctorForm::upp(QString str){
   QString st;
     if(str.size()==1) ui.LineEdit->setText(str.toUpper());
     else{
      st=str.right(1).toLower();      
                          ui.LineEdit->setText(str.left(str.size()-1).append(st));
     }
}
подключаю его к сигналу textEdited()
только вот одна проблема получается...он у меня привязывается к одному LineEdit, а мне нужно к нескольким едитам привязать этот сигнал и соответственно слот.А второй аргумент у слота upp(QString str, QLineEdit *l) установить, как я понимаю нельзя...подскажите пожалуйста как это можно сделать..или мне для каждого едита придется писать свой слот?Непонимающий
Записан
spirit
Гость
« Ответ #14 : Март 17, 2009, 09:12 »

У меня получился вот такой вот слот
void DoctorForm::upp(QString str){
   QString st;
     if(str.size()==1) ui.LineEdit->setText(str.toUpper());
     else{
      st=str.right(1).toLower();      
                          ui.LineEdit->setText(str.left(str.size()-1).append(st));
     }
}
подключаю его к сигналу textEdited()
только вот одна проблема получается...он у меня привязывается к одному LineEdit, а мне нужно к нескольким едитам привязать этот сигнал и соответственно слот.А второй аргумент у слота upp(QString str, QLineEdit *l) установить, как я понимаю нельзя...подскажите пожалуйста как это можно сделать..или мне для каждого едита придется писать свой слот?Непонимающий
в чем проблема? через sender устанавливайте.
Код
C++ (Qt)
void DoctorForm::upp(const QString &str)
{
QLineEdit *le = qobject_cast<QLineEdit *>(sender());
if (!le)
return;
 
QString st;
if(str.size()==1)
le->setText(str.toUpper());
else {
st=str.right(1).toLower();
le->setText(str.left(str.size()-1).append(st));
}
}
 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 19.