• 12484阅读
  • 10回复

【提问】怎样对QTable的单元格做输入限制 [复制链接]

上一主题 下一主题
离线sopq
 

只看楼主 倒序阅读 楼主  发表于: 2005-11-28
我想对QTable的单元格,做输入限制,就是说,只能输入整数,或者字母,大家有做过的吗?麻烦高手指点一二
[ 此贴被XChinux在2005-11-29 16:41重新编辑 ]
离线XChinux

只看该作者 1楼 发表于: 2005-11-28
QValidator
你好好看看这个类
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sopq

只看该作者 2楼 发表于: 2005-11-28
下面是引用XChinux于2005-11-28 15:49发表的:
QValidator
你好好看看这个类

好像也不可以吧,版主做过这方面的东东吗
离线XChinux

只看该作者 3楼 发表于: 2005-11-28
// regexp: optional '-' followed by between 1 and 3 digits
  QRegExp rx("-?\\d{1,3}");
  QValidator *validator = new QRegExpValidator(rx, this);

  QLineEdit *edit = new QLineEdit(this);
  edit->setValidator(validator);

只看到这个,QTable还没看过,,,我用的Qt4里面没有
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sopq

只看该作者 4楼 发表于: 2005-11-28
版主的提示让我了解料一下QValidator类,但我觉得我好像用不上,我现在的问题不是怎样实现对QLineedit控件实现输入限制,而是对QTable类的单元格怎样实现输入限制
离线sopq

只看该作者 5楼 发表于: 2005-11-28
Q4里没有QTable吗?我没用Q4,我用的是Q3.1.2,QTabel就是表格控件,像Excel似的,可以随意的
增减一行或一列,会不会是Q4里换了名字
离线narnialei
只看该作者 6楼 发表于: 2006-09-18
QTableView & QTableWidget
离线szmgold

只看该作者 7楼 发表于: 2006-09-29
QValidator跟它的派生类 确实可以对LineEdit 等控件设置输入限制,但是
QTableItem中没有setValidator这个函数,估计应该重载或重写个QtableItem吧,
我用的是3.3.6楼主找到办法共享下啊,互相学习
离线jxxfjun

只看该作者 8楼 发表于: 2006-10-11
可以这样:
QTableWidget *view;
QTableWidgetItem item;

view->setItem(i, j, item);
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);//其中的参数可以可以参考qnamespace.h
离线浪漫天使
只看该作者 9楼 发表于: 2008-06-16
qt4 里面的 挺麻烦的
http://lists.trolltech.com/qt-interest/2006-05/thread01345-0.html

我的做法
头文件
  1. #ifndef DATADELEGATE_H
  2. #define DATADELEGATE_H
  3. #include <QtGui>
  4. //#include <QModelIndex>
  5. class DataDelegate : public QItemDelegate
  6. {
  7. Q_OBJECT
  8. public:
  9. DataDelegate(QObject * parent = 0);
  10. public :
  11. virtual QWidget * createEditor ( QWidget * parent,
  12.                 const QStyleOptionViewItem & option,
  13.                 const QModelIndex & index ) const ;
  14.                
  15. virtual void setEditorData ( QWidget * editor, const QModelIndex & index ) const  ;
  16. virtual void setModelData ( QWidget * editor,
  17.               QAbstractItemModel * model,
  18.               const QModelIndex & index ) const;
  19. };
  20. #endif //DATADELEGATE_H


源文件
  1. #include "datadelegate.h"
  2. DataDelegate::DataDelegate(QObject * parent)
  3. :QItemDelegate(parent)
  4. {
  5. }
  6. QWidget* DataDelegate::createEditor(QWidget *parent,
  7.                   const QStyleOptionViewItem & option,
  8.                   const QModelIndex &index) const
  9. {
  10. QLineEdit *l = new QLineEdit(parent);
  11. QDoubleValidator *v = new QDoubleValidator(l);
  12. l->setValidator(v);
  13. return l;
  14. }
  15. void DataDelegate::setEditorData(QWidget *editor,const QModelIndex &index) const
  16. {
  17. //bool flag = false;
  18. QString str = index.data().toString();//toDouble(&flag);
  19. QLineEdit *l = static_cast<QLineEdit *>(editor);//dynamic_cast??
  20. l->setText(str);
  21. }
  22. void DataDelegate::setModelData(QWidget *editor,
  23.                 QAbstractItemModel *m,
  24.                 const QModelIndex &index) const
  25. {
  26. QLineEdit *l = static_cast<QLineEdit *>(editor);
  27. m->setData(index,l->text());
  28. }


使用
  1. DataDelegate *delegate = new DataDelegate(this);tableview->setItemDelegateForColumn(10,pinpaidelegate); //这里是指定第10列使用 要根据自己的实际情况
离线winxxp
只看该作者 10楼 发表于: 2008-06-16
楼上,你太牛了,这都看过?
快速回复
限100 字节
 
上一个 下一个