qt delegate 委托 多级联动 小结

最近使用qt写程序用到了treewidget和tablewidget

涉及到编辑默认情况下可以设置treewidget和tablewidget的item可编辑属性来进行编辑

默认情况只是简单的文本输入格式

在qt的demo中看到了spin box delegate实例

 

想到了使用delegate 委托

该实例只是对整个tablewidget使用同一个spin box格式的delegata

那么对于不同的列时候不通格式的委托那?

 

QWidget *EventsDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem & option ,
    const QModelIndex & index ) const
{
   if(index.column() == 0)
    {
        QComboBox *editor;
        editor = new QComboBox(parent);    
    }else if(index.column() == 1)
    {
        QSpinBox *editor;
         editor = new QSpinBox(parent);    
    }  
  
    return editor;
} 
这样就可以通过判断不同的列使用不同的委托,当然对于不同的行,或者是特定的某一行某一列使用的委托都可以控制
进一步的想法就是实现一行中不同列的级联
类似php或者其他语言中中经常用到的
思路起始很清晰,两个列都是使用QComboBox,只是如何在同一行的前一列选中后,根据选中的数据初始化后一列的数据选项
起始说白了就是如何获取前一列的数据了
上网搜索了好长时间,从中有所启示
最后找到了这个函数
index.model()->index(index.row(),index.column() -1);
 
 
所以最后的代码就是:
 
 
 QWidget *EventsDelegate::createEditor(QWidget *parent,
    const QStyleOptionViewItem & option ,
    const QModelIndex & index ) const
{   
    QComboBox *editor;
    editor = new QComboBox(parent);

    if(index.column() == 0)
    {
        //控件列
         //初始化下拉框数据
         ..........
     }else if(index.column() == 1)
    {
        //获取同一行前一列的数据,根据数据指定该index的数据
        QModelIndex brothModelIndex  = index.model()->index(index.row(),index.column() -1);
        QString str = brothModelIndex.data().toString();
         
        //根据str初始化本列的下拉框数据项
         .........
    }
 
 
 
接触qt一个月越来越喜欢上了,有很大的自己想象和发挥的空间
与qts们共勉

你可能感兴趣的:(PHP,语言,qt)