Qt之QListView

本文介绍了QT中的Model/View架构,并通过一个具体的ListView实例展示了如何使用QStandardItemModel来管理和展示数据。此外,还详细解释了QStringList的用法及QStandardItemModel的特点。

 

    QT提供了model/view 结构来管理数据与展示数据。

    对于搞J2ee开发的,MVC是再熟悉不过了,Model,View,Controller,qt的model/view模式跟MvC差不多。

    

    model提供数据模型,view展示数据,delegate会对数据项进行渲染。model,view,delegate通过信号/槽机制通信。

    前面在QML中就学过ListView.

   

 

    

 

    

 

   下面是一个简单的ListView的例子:

   

  

 

   

   对于以上例子说明:

   QStringList用于提供了一个String的List集合.继承自QList<QString>.

   公共方法:

  


 QStringList
 ()
 QStringList ( const QString & str )
 QStringList ( const QStringList & other )
 QStringList ( const QList<QString> & other )
boolcontains ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
QStringListfilter ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
QStringListfilter ( const QRegExp & rx ) const
intindexOf ( const QRegExp & rx, int from = 0 ) const
intindexOf ( const QString & value, int from = 0 ) const
intindexOf ( QRegExp & rx, int from = 0 ) const
QStringjoin ( const QString & separator ) const
intlastIndexOf ( const QRegExp & rx, int from = -1 ) const
intlastIndexOf ( const QString & value, int from = -1 ) const
intlastIndexOf ( QRegExp & rx, int from = -1 ) const
intremoveDuplicates ()
QStringList &replaceInStrings ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive )
QStringList &replaceInStrings ( const QRegExp & rx, const QString & after )
voidsort ()
QStringListoperator+ ( const QStringList & other ) const
QStringList &operator<< ( const QString & str )
QStringList &operator<< ( const QStringList & other )

 添加元素可使用append(),+=,<<

 迭代元素有三种方式:

       

        还有QList,QString 的一大堆方法 ,呵呵.

      

        QStandardItemModel类提供了一个用来存储自定义数据的普通的model。       

        QStandardItemModel可以用来存储标准的QT数据类型。它是Model/View之一。提供了典型的item-base工作模型。它的Item是QStandardItem类型的.         

        QStandardItemModel实现了QAbstractItemModel接口,也就意味着这个model能被用于提供任何支持这个接口的的view(如QListView,QTableView,QTreeView,和你自己定义的View)

        QStandardItem类提供了用于QStandardItemModel的Item,通常包含文本,图标或复选框等.

<think>嗯,用户想知道如何在Qt中继承QListView来实现自定义视图。首先,我需要回忆一下Qt的Model-View框架。QListView是视图组件,负责显示数据模型中的内容。通常,用户可能想改变项的显示方式或者交互行为,这时候可能需要继承QListView并重写某些方法。 根据引用[1]提到,QListView使用委托来控制项的显示和编辑。所以,是否需要自定义委托而不是继承QListView呢?比如,用户如果想改变项的绘制或编辑方式,应该使用自定义委托。但如果需要调整视图本身的布局、滚动方式或者其他视图特有的行为,那么继承QListView是必要的。 引用[3]提到,自定义项的方法有多种,用户可能对使用QListView还是QListWidget有疑问。QListWidget是更高级的组件,已经内置了项的处理,而QListView需要搭配模型使用。所以如果用户需要更灵活的控制,继承QListView并配合自定义模型可能是更好的选择。 接下来,我需要整理继承QListView的步骤。首先,创建一个子类,继承自QListView。然后,可能需要重写一些关键方法,比如paintEvent()或者mouse事件处理函数。比如,如果用户需要自定义项的布局,可能需要修改视图的布局方式,这时候可能需要重写updateGeometries()方法。 另外,引用[4]指出,如果模型是列表形式,适合用QAbstractListModel。所以在自定义视图时,需要确保模型与视图的兼容性。用户可能需要同时自定义模型和视图,但问题集中在视图部分,所以重点放在视图的继承上。 用户可能遇到的误区是混淆委托和视图的作用。需要明确,如果是外观或编辑方式的变化,用委托;如果是视图布局或行为的变化,才需要继承视图。例如,实现瀑布流布局,可能需要继承QListView并重写布局相关的函数。 另外,参考引用[2],QStyleOptionViewItem用于绘制项,这可能是在自定义视图或委托时用到的。如果用户需要在视图中调整项的显示,可能需要结合自定义委托和视图。 总结步骤:1. 创建QListView子类;2. 重写必要的方法;3. 结合模型和委托实现功能。需要给出代码示例,比如如何重写paintEvent或者调整布局。同时,提醒用户注意与委托的区分,避免不必要的继承。</think>在Qt中继承QListView实现自定义视图需要理解视图组件与模型/委托的协作关系。以下是具体实现步骤: ### 一、继承QListView的典型场景 需要继承QListView的情况包括: 1. 实现特殊布局(如瀑布流布局) 2. 自定义滚动条行为 3. 添加视图级别的交互事件 4. 实现多选模式下的特殊视觉效果 ### 二、实现步骤 1. **创建子类** ```cpp class CustomListView : public QListView { Q_OBJECT public: explicit CustomListView(QWidget *parent = nullptr); // 重写关键方法 void paintEvent(QPaintEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; }; ``` 2. **关键方法重写示例**(实现项间距调整) ```cpp void CustomListView::paintEvent(QPaintEvent *e) { QStyleOptionViewItem option = viewOptions(); option.rect.adjust(0, 5, 0, 5); // 增加项间距 QListView::paintEvent(e); } ``` 3. **布局控制**(实现网格布局) ```cpp void CustomListView::updateGeometries() { setViewMode(QListView::IconMode); setGridSize(QSize(120, 150)); // 自定义网格尺寸 QListView::updateGeometries(); } ``` ### 三、与委托的配合 当需要同时修改项显示内容时,应结合自定义委托[^1]: ```cpp void CustomListView::initDelegate() { CustomItemDelegate *delegate = new CustomItemDelegate(this); setItemDelegate(delegate); // 设置自定义委托 } ``` ### 四、注意事项 1. 优先通过模型/委托实现功能修改,仅在视图行为需要变更时继承QListView[^4] 2. 处理滚动区域时需要正确计算内容尺寸: $$ contentWidth = columnCount \times (itemWidth + spacing) $$ 3. 多选模式下需要特别注意选择状态的视觉反馈[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值