Qt QTableView行colow

时间:2016-06-20 06:12:25

标签: c++ qt

我正在学习Qt,我遇到了一些困难。 我正在使用QTableWidget,当一个项目收到双击更改行颜色时:

m_model.setData(m_model.index(1,2) , QColor(Qt::blue), Qt::BackgroundColorRole);

但是现在我正在使用QTableView,我为此创建了一个QAbstractTableModel并且工作正常。我用QSortFilterProxyModel完成了一些过滤器,也可以正常工作。 但我没有成功改变行颜色。 我已经尝试过这样的事情:

bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if (data(index, role) != value) {
        qDebug() << index << value << role;
        emit dataChanged(index, index, QVector<int>() << role);
        return true;
    }
    return false;
}

不行。 在model :: setData()中,我写了一些调试,它在函数中加入,但不会改变颜色。

QModelIndex(1,2,0x0,MyModel(0x7fffffffe408)) QVariant(QColor, QColor(ARGB 1, 0, 0, 1)) 8

调试输出:

<div class="row">
            <?php echo $form->labelEx($model,'transport_allowance'); ?>
            <?php echo $form->dropDownList($model,'transport_allowance',array('Car'=>'Car','Others'=>'Others'),array('onchange'=>'return muFun(this.value)')); ?>
            <?php echo $form->error($model,'transport_allowance'); ?>
</div>


<div id="others" style="display:none">
            <div class="row">
            <?php echo $form->labelEx($model,'transport_allowance'); ?>
            <?php echo $form->textField($model,'transport_allowance'); ?>
            <?php echo $form->error($model,'transport_allowance'); ?>
            </div>    
</div>

<div id="car" style="display:none">
            <div class="row">
            <?php echo $form->hiddenField($model,'transport_allowance',array('value'=>'450')); ?>
            </div>    
</div>

<script>
function muFun(obj){
            if(obj=="Car"){
            document.getElementById('car').style.display="block"; 
            document.getElementById('others').style.display="none"; 
            }else if(obj=="Others"){
            document.getElementById('others').style.display="block";
            document.getElementById('car').style.display="none"; 
            }
    }
</script>

1 个答案:

答案 0 :(得分:0)

您可以在视图构造函数调用函数--setItemDelegate

中使用自己的项委托

在委托重新实现绘画功能:

paint(QPainter *painter, const QStyleOptionViewItem &option, const   QModelIndex &index) const

从QStyleOptionViewItem获取有关几何的信息, 关于内容 - QModelIndex

要检查状态的一些标志,例如:

if(option.state & QStyle::State_Selected)
{
        painter->save();
        QPen pen(QColor(30, 144, 255, 255), 2, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin);
        int w = pen.width()/2;
        auto rect = option.rect;
        rect.setX(0);
        painter->setPen(pen);
        painter->drawRect(rect.adjusted(w,w,-w,-w));
        painter->restore();
}

至于双击事件 - 在视图中重新实现mouseDoubleClickEvent,获取索引(例如:indexAt(event-&gt; pos()))并存储一些颜色数据,然后在委托的绘画中使用该数据功能。