myTQComboTableItem* paItem; paItem= new myTQComboTableItem(aTable,cEa,FALSE); paItem->setEditable(TRUE); paItem->setCurrentItem(0); paItem->installEventFilter(new KeyFilter(paItem)); fActivePusk->aTable->setItem(j,i,paItem);
bool KeyFilter::eventFilter(QObject* pObj,QEvent* pe){ if ( pe->type() == QEvent::KeyPress ) { QKeyEvent *k = (QKeyEvent *)pe; int i=k->key(); if ((k->key()==Key_Enter) || (k->key()==Key_Return)) { QMessageBox::information( 0, "Попали"); return TRUE; } else return FALSE; } else return FALSE;}
// h файлclass myTQComboTableItem : public QComboTableItem, public QObject{ public: myTQComboTableItem(QTable * table, const QStringList & list, bool editable);};class KeyFilter : public QObject { Q_OBJECTprotected: virtual bool eventFilter(QObject*,QEvent*); public: KeyFilter(QObject* pObj=0, const char* pszName=0);}; // реализацияmyTQComboTableItem::myTQComboTableItem( QTable * table, const QStringList & list, bool editable = FALSE ) :QComboTableItem ( table, list, editable) {}
// описаниеclass TValidatorTableItem : public QTableItem , public QObject{ public: TValidatorTableItem(QTable* table, EditType et ); TValidatorTableItem(QTable* table, EditType et, QValidator* pValidator); TValidatorTableItem(QTable* table, EditType et, const QString& text ); TValidatorTableItem(QTable* table, EditType et, const QString& text, QValidator* pValidator); virtual ~TValidatorTableItem(); virtual QWidget * createEditor() const; QValidator* validator()const { return m_pValidator; }; void setValidator(QValidator* pValidator);private: QValidator* m_pValidator; QLineEdit* m_pEdit;}; // реализацияTValidatorTableItem::TValidatorTableItem(QTable* table, EditType et): QTableItem(table, et), m_pValidator(NULL), m_pEdit(NULL) {}TValidatorTableItem::TValidatorTableItem(QTable* table, EditType et, QValidator* pValidator): QTableItem(table, et), m_pValidator(NULL), m_pEdit(NULL){ setValidator(pValidator);}TValidatorTableItem::TValidatorTableItem(QTable* table, EditType et, const QString& text): QTableItem(table, et, text), m_pValidator(NULL), m_pEdit(NULL){}TValidatorTableItem::TValidatorTableItem(QTable* table, EditType et, const QString& text, QValidator* pValidator): QTableItem(table, et, text), m_pValidator(NULL), m_pEdit(NULL){ setValidator(pValidator);}void TValidatorTableItem::setValidator(QValidator* pValidator){ if (NULL != m_pValidator) delete m_pValidator; m_pValidator = pValidator; if (NULL != m_pEdit) m_pEdit->setValidator(m_pValidator); QString content = text(); if (NULL != m_pValidator) { int iPos = 0; if (QValidator::Invalid == m_pValidator->validate(content, iPos)) setText(""); }}QWidget* TValidatorTableItem::createEditor() const{ TValidatorTableItem* pItem = (TValidatorTableItem*)(this); pItem->m_pEdit = (QLineEdit*)(QTableItem::createEditor()); if (NULL != m_pEdit) { if (NULL != m_pValidator) m_pEdit->setValidator(m_pValidator); } return m_pEdit;}TValidatorTableItem::~TValidatorTableItem(){ setValidator(NULL);}
TValidatorTableItem* pItem; pItem= new TValidatorTableItem(aTable,QTableItem::Always); pItem->setValidator(new QDoubleValidator(-9,9,3,NULL)); pItem->installEventFilter(new KeyFilter(pItem)); aTable->setItem(j,i,pItem);
bool QTable::eventFilter( QObject *o, QEvent *e ){ QWidget *editorWidget = cellWidget( editRow, editCol ); switch ( e->type() ) { case QEvent::KeyPress: { QTableItem *itm = item( curRow, curCol ); int editRow = this->editRow; int editCol = this->editCol; if ((d->hasRowSpan || d->hasColSpan) && !editorWidget) { if (QTableItem *eitm = item(editRow, editCol)) { editRow = eitm->row(); editCol = eitm->col(); editorWidget = cellWidget(editRow, editCol); } } if ( isEditing() && editorWidget && o == editorWidget ) { itm = item( editRow, editCol ); QKeyEvent *ke = (QKeyEvent*)e; if ( ke->key() == Key_Escape ) { if ( !itm || itm->editType() == QTableItem::OnTyping ) endEdit( editRow, editCol, FALSE, edMode != Editing ); return TRUE; } if ( ( ke->state() == NoButton || ke->state() == Keypad ) && ( ke->key() == Key_Return || ke->key() == Key_Enter ) ) { if ( !itm || itm->editType() == QTableItem::OnTyping ) endEdit( editRow, editCol, TRUE, edMode != Editing ); activateNextCell(); //+++++++ это убрать ++++++++++++ НЕ БУДЕТ ПЕРЕХОДА НА ДРУГУЮ КЛЕТКУ? return TRUE; } if ( ke->key() == Key_Tab || ke->key() == Key_BackTab ) { if ( ke->state() & Qt::ControlButton ) return FALSE; if ( !itm || itm->editType() == QTableItem::OnTyping ) endEdit( editRow, editCol, TRUE, edMode != Editing ); if ( (ke->key() == Key_Tab) && !(ke->state() & ShiftButton) ) { if ( currentColumn() >= numCols() - 1 ) return TRUE; int cc = QMIN( numCols() - 1, currentColumn() + 1 ); while ( cc < numCols() ) { QTableItem *i = item( currentRow(), cc ); if ( !d->hiddenCols.find( cc ) && !isColumnReadOnly( cc ) && (!i || i->isEnabled()) ) break; ++cc; } setCurrentCell( currentRow(), cc ); } else { // Key_BackTab if ( currentColumn() == 0 ) return TRUE; int cc = QMAX( 0, currentColumn() - 1 ); while ( cc >= 0 ) { QTableItem *i = item( currentRow(), cc ); if ( !d->hiddenCols.find( cc ) && !isColumnReadOnly( cc ) && (!i || i->isEnabled()) ) break; --cc; } setCurrentCell( currentRow(), cc ); } itm = item( curRow, curCol ); if ( beginEdit( curRow, curCol, FALSE ) ) setEditMode( Editing, curRow, curCol ); return TRUE; } if ( ( edMode == Replacing || itm && itm->editType() == QTableItem::WhenCurrent ) && ( ke->key() == Key_Up || ke->key() == Key_Prior || ke->key() == Key_Home || ke->key() == Key_Down || ke->key() == Key_Next || ke->key() == Key_End || ke->key() == Key_Left || ke->key() == Key_Right ) ) { if ( !itm || itm->editType() == QTableItem::OnTyping ) { endEdit( editRow, editCol, TRUE, edMode != Editing ); } keyPressEvent( ke ); return TRUE; } } else { QObjectList *l = viewport()->queryList( "QWidget" ); if ( l && l->find( o ) != -1 ) { delete l; QKeyEvent *ke = (QKeyEvent*)e; if ( ( ke->state() & ControlButton ) == ControlButton || ( ke->key() != Key_Left && ke->key() != Key_Right && ke->key() != Key_Up && ke->key() != Key_Down && ke->key() != Key_Prior && ke->key() != Key_Next && ke->key() != Key_Home && ke->key() != Key_End ) ) return FALSE; keyPressEvent( (QKeyEvent*)e ); return TRUE; } delete l; } } break; case QEvent::FocusOut: if ( isEditing() && editorWidget && o == editorWidget && ( (QFocusEvent*)e )->reason() != QFocusEvent::Popup ) { QTableItem *itm = item( editRow, editCol ); if ( !itm || itm->editType() == QTableItem::OnTyping ) { endEdit( editRow, editCol, TRUE, edMode != Editing ); return TRUE; } } break;#ifndef QT_NO_WHEELEVENT case QEvent::Wheel: if ( o == this || o == viewport() ) { QWheelEvent* we = (QWheelEvent*)e; scrollBy( 0, -we->delta() ); we->accept(); return TRUE; }#endif default: break; } return QScrollView::eventFilter( o, e );}