Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Evgeniya от Март 16, 2009, 10:47



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


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


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Rcus от Март 16, 2009, 11:37
QIntValidator::QIntValidator ( int minimum, int maximum, QObject * parent )


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 16, 2009, 11:49
Пишу
QIntValidator *valint;
valint =new QIntValidator(0,9,this);
ui.PCOD->setValidator(valint);

так он дает только одну цифру написать  :(


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Rcus от Март 16, 2009, 11:50
/*sigh*/
new QIntValidator(0, 999999, this);


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 16, 2009, 11:55
Спасибки!!!!!! :)Теперь работает.... :)
А вот сдеся
QRegExp regExp_1("[А-Яа-]{255}") можно сделать как-нить неограниченное количество символов вводить??, чтобы тож можно было этот сигнал использовать???


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: igor_bogomolov от Март 16, 2009, 12:08
QRegExp regExp("\\d+");
Подайдет?


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 16, 2009, 13:05
Ну практически....мне просто надо неограниченное кол-во определенных символов
получилось так QRegExp regExp("[А-Яа-яЁё' -]+");
Всем спасибо!!!!!! :)


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 16, 2009, 17:04
У меня тут еще один вопросик созрел))...
хочу на QLineEdit установить маску ввода, чтобы первый символ был в верхнем регистре, а последующие в нижнем...только их неограниченное кол-во должно быть.Это вообще возможно??
Я делаю пока так ui.lineEdit_2->setInputMask(">X!x"); , но естественно сдеся тока два символа (((


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: igor_bogomolov от Март 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);
}


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: spirit от Март 16, 2009, 19:23
а зачем так сложно?  :)
можно сигнал отлавливать QLineEdit::textEdited
и в слоте-обработчике переводить в верхний регистр и устанавливать текст.  ;)


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: igor_bogomolov от Март 16, 2009, 19:30
Оу. Это я поторопился.
Почему то в сторону сигналов сразу не подумал смотреть.
Наверное слишком много за последнии дни с eventFilter возился :)


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 16, 2009, 21:49
Спасибочки ОГРОМНОЕ!!!!! :) :) :)
Получилось с помощью сигнала!!!!!!!!


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 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) установить, как я понимаю нельзя...подскажите пожалуйста как это можно сделать..или мне для каждого едита придется писать свой слот????


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: spirit от Март 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));
}
}
 


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 17, 2009, 09:18
точно...теперь все как надо  :) :) :)
Если честно, даже не знала, что так можно ;)
Спасибо, вы меня прям выручили!!!!


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 18, 2009, 14:56
В QTextEdit не обнаружила сигнала по типу textEdited() как в QLineEdit, который не реагировал бы на setText()...есть только textChanged(),который реагирует и на setText(), а мне нужно чтобы  реагировал на изменения только с клавиатуры...можт есть какой аналог??Я пока что-то не нашла  >:(


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: Evgeniya от Март 18, 2009, 15:30
или можно как-нить запретить выполнение сигнала???


Название: Re: QLineEdit не реагирут на сигнал editingFinished()
Отправлено: FantasyOR от Декабрь 17, 2010, 16:11
Простите, что занимаюсь некромантией, но этот вопрос рано или поздно встает перед каждым(почти) и его можно решить в 1 строку, а не перегружать events и отлавливать слоты:

LineEdit1->setInputMask(">");

http://qtdocs.narod.ru/4.1.0/doc/html/qlineedit.html

"> - Все следующие алфавитный символы переводятся в верхний регистр." - перевод делал не я =)

используйте маску и регулярные выражения(да бывают очень специфичные требования и тогда нужно ловить...). Удачи