zoukankan      html  css  js  c++  java
  • QTableView带可编辑进度条

    main文件与上一个例子完全一致,也使用QStandardItemModel,关键是有这句:QStandardItem.setEditable(false); 

    继承QAbstractItemDelegate后,覆盖4个函数(全部经过验证,都是自带后覆盖):

    class BarDelegate : public QAbstractItemDelegate
    {
    public:
    BarDelegate( QObject *parent = 0 );
    
    void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
    QSize sizeHint( const QStyleOptionViewItem &option, const QModelIndex &index ) const;
    
    QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
    void setEditorData( QWidget *editor, const QModelIndex &index ) const;
    void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const;
    void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
    };

    进度条本身的代码不贴了,直接贴这四个函数:

    QWidget *BarDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
    {
      QSlider *slider = new QSlider( parent );
      
      slider->setAutoFillBackground( true );
      slider->setOrientation( Qt::Horizontal );
      slider->setRange( 0, 100 );
      slider->installEventFilter( const_cast<BarDelegate*>(this) );
      
      return slider;
    }
    
    void BarDelegate::updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const
    {
      editor->setGeometry( option.rect );
    }
    
    void BarDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
    {
      int value = index.model()->data( index, Qt::DisplayRole ).toInt();
      static_cast<QSlider*>( editor )->setValue( value );
    }
    
    void BarDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
    {
      model->setData( index, static_cast<QSlider*>( editor )->value() ); // 这句很关键,把model的数据也修改了
    }
  • 相关阅读:
    Android开发历程_8(Tween Animation的2种属性设置方法)
    Kinect+OpenNI学习笔记之1(开发环境的建立)
    Android开发历程_12(Handler的使用)
    Qt学习之路_11(简易多文档编辑器)
    特征点检测学习_1(sift算法)
    Android开发历程_9(Frame Animation的使用)
    Qt学习之路_13(简易俄罗斯方块)
    总结系列_12(XML使用总结,续...)
    Android开发历程_11(AnimationListener的使用方法)
    Android开发历程_18(XML文件解析)
  • 原文地址:https://www.cnblogs.com/findumars/p/4058132.html
Copyright © 2011-2022 走看看