Russian Qt Forum

Qt => Вопросы новичков => Тема начата: LIKAN_BLK от Май 05, 2012, 18:01



Название: Сигналы QLineEdit
Отправлено: LIKAN_BLK от Май 05, 2012, 18:01
Необходимо чтоб QLineEdit вырабатывал сигнал после того как пользователь закончил ввод, те когда во вводе встретился EOS(Ну или по нажатии клавиши Enter). Как организовать?


Название: Re: Сигналы QLineEdit
Отправлено: Serr500 от Май 05, 2012, 18:22
void QLineEdit::returnPressed () [signal]

http://qt-project.org/doc/qt-4.8/qlineedit.html#returnPressed


Название: Re: Сигналы QLineEdit
Отправлено: Igors от Май 05, 2012, 18:39
Необходимо чтоб QLineEdit вырабатывал сигнал после того как пользователь закончил ввод, те когда во вводе встретился EOS(Ну или по нажатии клавиши Enter). Как организовать?
Откройте букварь, класс QLineEdit и посмотрите какие сигналы он испускает - через пару минут (или раньше) Вы найдете нужный. Это гораздо быстрее и практичнее чем спрашивать такие вещи на форуме  :)


Название: Re: Сигналы QLineEdit
Отправлено: LIKAN_BLK от Май 05, 2012, 20:31
ок почитал, теперь вопрос, как это использовать?
Я хочу чтоб этот сигнал ловил класс отнаследованный от QWidget.
В определении класса я пишу
Код:
private slots:
        void on_lineEdit_returnPressed();
Я хочу, чтобы по принятии сигнала на этом виджете что-нибудь отрисовывалось. Как подружить этот слот и paintEvent ?


Название: Re: Сигналы QLineEdit
Отправлено: Serr500 от Май 05, 2012, 20:48
Вы принципиально не читаете документацию?

Цитировать
QLineEdit LineEdit;
MyWidget MyWidget;
MyWidget.connect(&LineEdit, SIGNAL(returnPressed()), SLOT(on_lineEdit_returnPressed()));

В слоте on_lineEdit_returnPressed() выполняете требуемые отрисовки.


Название: Re: Сигналы QLineEdit
Отправлено: LIKAN_BLK от Май 05, 2012, 20:49
Эмм,  я думал что какие либо операции с QPainter можно производить только в paintEvent, не?


Название: Re: Сигналы QLineEdit
Отправлено: Serr500 от Май 05, 2012, 20:57
Если Вы хотите перерисовать виджет по сигналу, то в обработчике сигнала выставляете требуемые параметры и вызываете QWidget::repaint() или QWidget::update(). Кстати, можно даже так:
Код:
MyWidget.connect(&LineEdit, SIGNAL(returnPressed()), SLOT(repaint()));
// или
MyWidget.connect(&LineEdit, SIGNAL(returnPressed()), SLOT(update()));

Вы, похоже, не делаете различий между сигналами (типа returnPressed) и событиями (типа paintEvent). Должен Вам сказать, что это совершенно разные понятия.