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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsTextItem signal [решено, но криво]  (Прочитано 4537 раз)
daimon
Гость
« : Ноябрь 30, 2011, 22:37 »

Как можеа организовать обработку окончания редактирования текста в итеме через сигнал?
« Последнее редактирование: Декабрь 02, 2011, 01:39 от daimon » Записан
daimon
Гость
« Ответ #1 : Декабрь 01, 2011, 00:08 »

самое тупое решение - написать свой класс

Код
C++ (Qt)
class Text : public QGraphicsTextItem
{
Q_OBJECT
 
signals:
void inFocus(bool);
public:
Text()
{
 
}
protected:
void focusOutEvent ( QFocusEvent * event )
{
emit inFocus(true);
QGraphicsTextItem::focusOutEvent(event);
}
};
Записан
alexman
Гость
« Ответ #2 : Декабрь 01, 2011, 09:57 »

Чем же оно тупое? Улыбающийся
Записан
daimon
Гость
« Ответ #3 : Декабрь 01, 2011, 16:00 »

Чем же оно тупое? Улыбающийся
пришлось писать для этого свой класс, а так можна бы было как-то вытащить потомка из QGraphicsTextItem, если бы он был QLineEdit, то тогда и ловить его сигналы. Возвращал всех детей QGraphicsTextItem - там нет QLineEdit((((
Записан
daimon
Гость
« Ответ #4 : Декабрь 01, 2011, 16:02 »

вот как-бы допиляный вариант

Код
C++ (Qt)
class TextItem : public QGraphicsTextItem
{
Q_OBJECT
private:
QString oldText;
 
signals:
void inFocus(bool);
void textChanged();
public:
TextItem()
{
 
}
protected:
void focusOutEvent ( QFocusEvent * event )
{
emit inFocus(false);
 
if(oldText != QGraphicsTextItem::toPlainText())
emit textChanged();
 
QGraphicsTextItem::focusOutEvent(event);
 
}
 
void focusInEvent ( QFocusEvent * event )
{
oldText = QGraphicsTextItem::toPlainText();
emit inFocus(false);
QGraphicsTextItem::focusInEvent(event);
}
 
 
 
void keyPressEvent ( QKeyEvent * event )
{
 
 
switch (event->key())
{
case Qt::Key_Return:
if(event->modifiers() & Qt::ControlModifier)
scene()->clearFocus();
 
else QGraphicsTextItem::keyPressEvent(event);
break;
default:QGraphicsTextItem::keyPressEvent(event);
break;
}
 
 
 
}
};
Записан
artiom_kh
Гость
« Ответ #5 : Март 02, 2012, 12:55 »

проще в TextItem передавать некий объект (получатель сигнала, наследуем от QObject*) у которого по окончании редактирование дёргать слот (или сигнал) через QMetaObject:

Код
C++ (Qt)
QMetaObject::invokeMethod( m_pTextWatcher, "textEditFinished" );
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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