Название: qt3x: QTableItem+Validator
Отправлено: russ от Декабрь 16, 2006, 21:04
Здраствуйте, буду краток. Требуется поставить валидатор на combo который в QTable'e. Есть класс, но я не понял как его использовать, приведите пример пожайлусто. Спасибо. ////.h #ifndef VALIDATORTABLEITEM_H #define VALIDATORTABLEITEM_H
#include <qtable.h> #include <qvalidator.h>
class ValidatorTableItem : public QTableItem { public: ValidatorTableItem(QTable * table, EditType et, const QString & text, QRegExpValidator * V = 0); ValidatorTableItem(QTable * table, EditType et, const QString & text, const QPixmap & p, QRegExpValidator * = 0); virtual QWidget * createEditor() const; QRegExpValidator * Valdtr; // We allow the direct, public manipulation of Valdtr to keep the object as small as possible rather than adding the size of a setValidator function };
#endif
////////////////////////////////////////// //cpp #include "validatortableitem.h" #include <qlineedit.h>
ValidatorTableItem::ValidatorTableItem(QTable * table, EditType et, const QString & text, QRegExpValidator * V) : QTableItem(table, et, text) { Valdtr = V; setReplaceable(false); if ( Valdtr && (! text.isEmpty()) && text.find(Valdtr->regExp()) == -1 ) { // i.e., we have not passed valid text in the constructor setText(""); } }
ValidatorTableItem::ValidatorTableItem(QTable * table, EditType et, const QString & text, const QPixmap & p, QRegExpValidator * V) : QTableItem(table, et, text, p) { Valdtr = V; setReplaceable(false); if ( Valdtr && (! text.isEmpty()) && text.find(Valdtr->regExp()) == -1 ) { // i.e., we have not passed valid text in the constructor setText(""); } }
QWidget * ValidatorTableItem::createEditor() const { QLineEdit *e = new QLineEdit( table()->viewport(), "qt_tableeditor" ); e->setFrame( FALSE ); if ( Valdtr ) { e->setValidator(Valdtr); } e->setText( text() ); return e; }
///////////////// Примерно такой у меня будет мейн. //main #include <qapplication.h> #include <form4.h> #include <stdio.h> #include <qpushbutton.h> #include <qvalidator.h> #include <qlineedit.h> #include <qstring.h> #include <qtable.h> #include <qlabel.h> #include <validatortableitem.h>
int main( int argc, char ** argv ) { QApplication a( argc, argv ); Form4 *w = new Form4(); w->show(); a.connect( &a, SIGNAL( lastWindowClosed() ),&a, SLOT( quit() )); a.connect( w->quit, SIGNAL(clicked()),&a, SLOT( quit() ) ); a.connect( w->push, SIGNAL(clicked()), w, SLOT(slot_simplex())); QDoubleValidator * val = new QDoubleValidator( w ); w->te->setValidator(val); w->tbl->horizontalHeader()->setLabel(0, "Name");
QString string0; QRegExp rx( "-?\\d{1,3}" ); QRegExpValidator *vldtr= new QRegExpValidator( rx, w ); ////ValidatorTableItem *vti; ////w->tbl->setItem( 2, 2, ValidatorTableItem::QTableItem(w->tbl,QTableItem::Always,string0,vldtr));
w->tbl->setItem(1 , 1,new QTableItem( w->tbl, QTableItem::WhenCurrent, QString::number( 1 * 1 ) ) );
return a.exec(); }
[size=9px][color=#999999]добавлено спустя 1 минуту:[/color][/size]
/* validatortableitem.h defines a QTableItem which allows a QRegExpValidator to be set */
/* Copyright (C) 2003 John A. Sullivan III This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
e-mail: john.sullivan@nexusmgmt.com */
/* Revision 0 - December 31, 2003 - John Sullivan */
Название: qt3x: QTableItem+Validator
Отправлено: Steven_Orko от Декабрь 17, 2006, 00:32
Я написал вот такой класс специально под твой вопрос: Заголовочный файл TValidatorTableItem.h: #ifndef __TVALIDATORTABLEITEM_H__INCL #define __TVALIDATORTABLEITEM_H__INCL
#include <qtable.h>
class QValidator; class QLineEdit;
class TValidatorTableItem : public QTableItem { 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; };
#endif
Файл реализации TValidatorTableItem.cpp: #include <qvalidator.h> #include <qlineedit.h>
#include "TValidatorTableItem.h"
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 = const_cast<TValidatorTableItem*>(this); pItem->m_pEdit = dynamic_cast<QLineEdit*>(QTableItem::createEditor()); if (NULL != m_pEdit) { if (NULL != m_pValidator) m_pEdit->setValidator(m_pValidator); } return m_pEdit; }
TValidatorTableItem::~TValidatorTableItem() { setValidator(NULL); }
Пример использования main.cpp: #include <qapplication.h> #include <qvalidator.h> #include "TValidatorTableItem.h"
int main(int argc, char* argv[]) { QApplication app(argc, argv, true);
QTable myTable; myTable.show(); myTable.setNumCols(4); myTable.setNumRows(16);
//==============Variant number 1================= //TValidatorTableItem* pItem = new TValidatorTableItem(&myTable, QTableItem::Always); //pItem->setValidator(new QIntValidator(1, 100, NULL));
//==============Variant number 2================= //myTable.setItem(1, 1, new TValidatorTableItem(&myTable, QTableItem::Always, new QIntValidator(1, 100, NULL)));
//==============Variant number 3================= TValidatorTableItem* pItem = new TValidatorTableItem(&myTable, QTableItem::Always, new QIntValidator(1, 100, NULL)); myTable.setItem(1, 1, pItem);
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); return app.exec(); }
|