Просмотр сообщений
|
Страниц: 1 ... 26 27 [28] 29 30
|
410
|
Qt / Установка, сборка, отладка, тестирование / Проблема перехода VC6 -> VC2005
|
: Июль 31, 2008, 14:49
|
Пока компилировал под VC6, приложение запускалось ка компе без установленного VC. Перешел на VC2005, и теперь имею сообщение Приложение не было запущено, поскольку оно некорректно настроено. Повторная установка приложения может решить данную проблему.
Что нужно делать?
|
|
|
413
|
Qt / Пользовательский интерфейс (GUI) / Re: Проблемма с фильтром событий QT3.3.8
|
: Июль 25, 2008, 20:30
|
А если переписать нижеследующее 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 ); }
|
|
|
414
|
Qt / Пользовательский интерфейс (GUI) / Re: Проблемма с фильтром событий QT3.3.8
|
: Июль 25, 2008, 20:24
|
Создание ячейки таблицы 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);
Фильтр тот же. Работает, фильтр отлавливает нажатие Enter и Return
|
|
|
415
|
Qt / Пользовательский интерфейс (GUI) / Re: Проблемма с фильтром событий QT3.3.8
|
: Июль 25, 2008, 17:53
|
В столбцах таблицы, где используются поля с TValidatorTableItem, все прекрасно срабатывает.
А что это за класс TValidatorTableItem? Можно глянуть его код? // описание 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); }
Это я взял где-то на ФОРУМЕ
|
|
|
419
|
Qt / Пользовательский интерфейс (GUI) / Проблемма с фильтром событий QT3.3.8
|
: Июль 21, 2008, 11:41
|
В таблице есть столбец Combobox 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_OBJECT protected: 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) { }
|
|
|
420
|
Qt / Общие вопросы / Re: Помогите с маской для Validator
|
: Июль 03, 2008, 15:30
|
Мешает недостаток знаний и опыта. Вариант
QRegExp rx("[-+]{0,1}[0-1][0-9][0-9] [0-5][0-9] [0-5][0-9]");
почти устраивает. Знак теперь не обязателен... Почти, потому, что при вводе не работают навигационные клавиши... Это как нибудь лечится?
|
|
|
|
|