Qt项视图类

Qt项视图类

QListWidget.QTableWidget,QTreeWidget为Qt提供的简便的项视图类,今天主要记录学习QListView,QTableView和QTreeView的使用.
不同与MFC的模型-视图-控制器,Qt采用了模型(model)-视图(view)的方式,不过Qt使用的不是控制器,而是委托(delegate).

实现自定义模型

在模型中,每个数据元素都有一个模型索引和一套属性,称为角色(role),这些角色可以保存任意值。常用的有Qt::DisplayRole,Qt::EditRole等。下面主要以QTableView来做笔记。
QTableView对于的model继承与QAvstractTableModel这个类。对于表模型,我们必须重写的函数有rowCount(),columnCount(),data().
rowCount()和columnCount()函数我们只需在其中返回自定义model的个数即可,它可支撑整个table的行列。

int MyTable::rowCount(const QModelIndex&) const
{
    return mRowCount;
}
int MyTable::columnCount(const QModelIndex&) const
{
    return mColumnCount;
}

这里需要说一下QModelIndex这个类。这个类可以理解为表格单元格的索引。可以通过QModelIndex::row()和QModelIndex::column()获得当前单元格的行号和列号。当然,在model中,我们可以通过QModelIndex index(int row, int column, QModelIndex& parent)来获得当前单元格在parent下的索引。

data()函数为model中十分重要的函数,它返回一个项的任意角色的值。

QVariant MyTable::data(const QModelIndex &index, int role)
{
    if (!index.isVaild())
    {
        return QVariant(); 
    }

    if (role == Qt::DisPlayRole)
    {}
    else if (role == Qt::TextAlignmentRole)
    {}
}

role的各个参数可以查询Qt文档Qt::ItemDataRole
另外,也可以用headerData()函数来实现水平表头的自定义。
对一个QTableView中进行setModel(model)即可现实信息

自定义委托

一般我们会将自定义的委托继承于QItemDelegate,因为这样我们可以从默认的委托中获益。当然,若需要从头开始,也可继承于QAbstractItemDelegate。我们需要重新paint(),它用来改变持显示。当然,如果想要实现一个可以编辑数据的委托,则需重写createEditor(),setEditorData(),setModelData()。

void MyDelegate::paint(QPainter *painter
const QStyleOptionViewItem &option,
const QModelIndex *index) const
{
    if (index.column() == 1)
    {}
    else if (index.column() == 2)
    {}
    else
    {
        QItemDelegate::paint(painter, option, index);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 视图是为了方便用户在 GUI 界面上显示和操作数据而设计的。常见的 Qt 视图有 QListView、QTableView、QTreeView 等。下面介绍一些常用的成员函数: 1. setModel():设置视图的数据模型,数据模型是 Qt 中 MVC(Model-View-Controller)模式的核心。 2. setSelectionModel():设置视图的选择模型,选择模型是管理视图中哪些被选中的对象。 3. setEditTriggers():设置视图的编辑触发方式,例如双击、单击等。 4. setSelectionMode():设置视图的选择模式,包括单选、多选等。 5. setSortingEnabled():设置是否启用视图中的排序功能。 6. setHorizontalHeader()、setVerticalHeader():设置视图中的水平和垂直表头。 7. setColumnWidth()、setRowHeight():设置列宽和行高。 8. scrollTo():将指定的滚动到视图中心。 9. indexAt():返回当前鼠标位置下的的索引。 10. selectedIndexes():返回当前选中的索引列表。 11. resizeColumnsToContents()、resizeRowsToContents():自适应调整列宽和行高。 12. setItemDelegate():设置的代理,用于自定义的外观和行为。 13. horizontalScrollBar()、verticalScrollBar():返回水平和垂直滚动条对象。 14. setHorizontalScrollMode()、setVerticalScrollMode():设置水平和垂直滚动条的显示模式。 15. setDragEnabled()、setAcceptDrops():设置是否支持拖放操作。 总之,Qt 视图提供了丰富的功能和接口,可以满足不同的需求。开发者可以根据自己的具体情况选择合适的视图,并灵活运用其成员函数来实现所需的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值