Qt 笔记:深入解析视图与委托

视图与委托

-视图负责确定数据项的组织显示方式(列表,树形,表格)

-委托负责具体数据项的显示和编辑(数据值,编辑器)

-视图和委托共同完成数据显示功能和数据编辑功能

自定义委托的默认数据显示方式

-重写paint成员函数

-在paint中自定义数据显示方式

-重写editorEvent成员函数

-在editorEvent中处理交互事件

在paint中自定义数据显示方式

if(index.data().type() == QVariant::Bool)
{
    bool data = index.model()->data(index,Qt::DispalyRole).toBool();
    QStyleOptionButton checkBoxStyle;    //组件绘制参数
    
    /* 设置具体的绘制参数 */
    checkBoxStyle.state = data? QStyle::State_On : QStyle::State_Off;
    checkBoxStyle.state |= QStyle::State_Enabled;
    checkBoxStyle.rect = option.rect;
    checkBoxStyle.rect.setX(option.rect.x() + option.rect.width() / 2 -6);

    /* 根据参数绘制组件(数据项自定义显示方式)*/
    QApplication::style()->drawControl(QStyle::CE_CheckBox,&checkBoxStyle,painter);
}

在editorEvent中处理交互事件

if(index.data().type() == QVariant::Bool)
{
    QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);

    if(event->type() == QEvent::MouseButtonPress &&
        option.rect.contains(mouseEvent->pos()))
    {
        bool data = model->data(index,Qt::DisplayRole).toBool();
        model->setData(index, !data,Qt::DisplayRole);
    }

}

委托是视图的重要构成部分

-视图负责数据项的组织显示方式

-委托负责具体数据项中的数值的显示方式

-重写委托的paint函数自定义数据项显示方式

-重写委托的editorEvent函数处理交互事件

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/82841836
今日推荐