Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: daimon от Ноябрь 30, 2011, 22:37



Название: QGraphicsTextItem signal [решено, но криво]
Отправлено: daimon от Ноябрь 30, 2011, 22:37
Как можеа организовать обработку окончания редактирования текста в итеме через сигнал?


Название: Re: QGraphicsTextItem signal
Отправлено: daimon от Декабрь 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);
}
};


Название: Re: QGraphicsTextItem signal
Отправлено: alexman от Декабрь 01, 2011, 09:57
Чем же оно тупое? :)


Название: Re: QGraphicsTextItem signal
Отправлено: daimon от Декабрь 01, 2011, 16:00
Чем же оно тупое? :)
пришлось писать для этого свой класс, а так можна бы было как-то вытащить потомка из QGraphicsTextItem, если бы он был QLineEdit, то тогда и ловить его сигналы. Возвращал всех детей QGraphicsTextItem - там нет QLineEdit((((


Название: Re: QGraphicsTextItem signal
Отправлено: daimon от Декабрь 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;
}
 
 
 
}
};


Название: Re: QGraphicsTextItem signal [решено, но криво]
Отправлено: artiom_kh от Март 02, 2012, 12:55
проще в TextItem передавать некий объект (получатель сигнала, наследуем от QObject*) у которого по окончании редактирование дёргать слот (или сигнал) через QMetaObject:

Код
C++ (Qt)
QMetaObject::invokeMethod( m_pTextWatcher, "textEditFinished" );