Qt Model/View理解(四)---实战

本文通过一个实例展示了如何利用Qt的Model/View框架构建一个包含姓名、性别、年龄、分数和毕业状态的学生信息表格。表格中包含了不可编辑的文本、下拉框选择、可编辑的输入框和切换开关。详细介绍了每个控件的配置,并通过点击确认按钮测试数据写入,以确保信息正确保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面讲解了有关Model/View的实现方式,下面将用一个例子,介绍如何构造model和使用Delegate渲染进行混合编程,主要显示学生信息,tableview里面有checkbox,  combBox,  lineEdit等操作控件,最终效果如下。


1.首先,我们建立2个学生的基本信息(姓名,性别,年龄,分数,是否毕业),并放在链表中。姓名不可编辑,性别combox下拉可选,年龄,分数双击可修改,是否毕业开关可编辑。

enum E_Gender
{
    E_BOY,
    E_GIRL,
};

typedef struct S_Student
{
    bool m_check;
    QString m_name;
    int m_age;
    E_Gender m_gender;
    int m_score;
    bool m_graduate;
}S_STU;
QList<S_STU*> StuList;
    StuList.clear();

    S_STU *stu1 = new S_STU;
    stu1->m_check = false;
    stu1->m_name = QString("XiaoMing");
    stu1->m_gender = E_BOY;
    stu1->m_age = 12;
    stu1->m_score = 98;
    stu1->m_graduate = true;

    S_STU *stu2 = new S_STU;
    stu2->m_check = false;
    stu2->m_name = QString("XiaoHong");
    stu2->m_gender = E_GIRL;
    stu2->m_age = 10;
    stu2->m_score = 100;
    stu2->m_graduate = false;

    StuList.append(stu1);
    StuList.append(stu2);
2.构造model模型,重载常用的虚函数。
int	StudentModel::columnCount(const QModelIndex & parent) const
{
    Q_UNUSED(parent);
    return 6;
}

int	StudentModel::rowCount(const QModelIndex & parent) const
{
    Q_UNUSED(parent);
    return StuList.count();
}

QVariant StudentModel::data(const QModelIndex & index, int role) const
{
    if (!index.isValid())
        return QVariant();

    int nRow = index.row();
    int nColumn = index.column();

    S_STU *stu = StuList.at(nRow);
    switch(role){
        case Qt::TextColorRole:
            return QColor(Qt::black);
        case Qt::TextAlignmentRole:
            return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
        case Qt::UserRole+COLUMN_CHECK:
        {
            if (nColumn == COLUMN_CHECK)
                return stu->m_check;
            return "";
        }
        case Qt::DisplayRole:
        {
            if (nColumn == COLUMN_NAME)
                
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值