QListView

一个简单的ListView的例子

mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H
#include <QMainWindow>
#include <QListView>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QModelIndex>
namespace Ui {
   class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
    QListView *listView;
    QStandardItemModel *standardItemModel;
private slots:
     void itemClicked(QModelIndex index);
};
#endif // MAINWINDOW_H
 
mainwindow.cpp
 
#include "mainwindow.h"
#include <QBrush>
#include <QRadialGradient>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    listView = new QListView(this);
    standardItemModel = new QStandardItemModel(this);
    QStringList strList;
    strList.append("string1");
    strList.append("string2");
    strList.append("string3");
    strList.append("string4");
    strList.append("string5");
    strList.append("string6");
    strList.append("string7");
    strList << "string8";
    strList += "string9";
    int nCount = strList.size();
    for(int i = 0; i < nCount; i++)
    {
        QString string = static_cast<QString>(strList.at(i));
        QStandardItem *item = new QStandardItem(string);
        if(i % 2 == 1)
        {
            QLinearGradient linearGrad(QPointF(0, 0), QPointF(200, 200));
            linearGrad.setColorAt(0, Qt::darkGreen);
            linearGrad.setColorAt(1, Qt::yellow);
            QBrush brush(linearGrad);
            item->setBackground(brush);
        }
        standardItemModel->appendRow(item);
    }
    listView->setModel(standardItemModel);
    listView->setFixedSize(200,300);
    connect(listView,SIGNAL(clicked(QModelIndex)),this,SLOT(itemClicked(QModelIndex)));
}
MainWindow::~MainWindow()
{
}
void MainWindow::itemClicked(QModelIndex index)
{
    qDebug() << index.data().toString();
}
 
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
运行结果如下:
 
 
 
### QListView 的基本概念 `QListView` 是 Qt 框架中的一个重要组件,专门用于显示列表形式的数据。为了更好地管理和展示数据,`QListView` 通常会与 `QAbstractListModel` 及其派生类(例如 `QStringListModel`, `QStandardItemModel`)一起工作[^1]。 ### 创建并配置 QListView 实例 #### Python (PyQt5) ```python from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListView from PyQt5.QtCore import QStringListModel app = QApplication([]) window = QWidget() layout = QVBoxLayout(window) list_view = QListView() model = QStringListModel(['Item 1', 'Item 2', 'Item 3']) list_view.setModel(model) layout.addWidget(list_view) window.setLayout(layout) window.show() app.exec_() ``` 上述代码展示了如何创建一个简单的窗口应用程序,在其中设置了一个 `QListView` 控件,并为其指定了一个字符串列表作为数据源。这里使用的是 `QStringListModel` 类型的数据模型来存储要显示的内容。 对于更复杂的应用场景,则可以考虑采用自定义的 `QAbstractListModel` 子类或者现成的 `QStandardItemModel` 来满足需求。这些高级功能允许开发者构建更为复杂的界面逻辑以及提供更好的用户体验[^5]。 当涉及到大量条目时,相比于其他类似的控件如 `QListWidget` 和 `QComboBox`,`QListView` 结合合适的数据模型能够带来更高的性能表现和灵活性[^4]。 另外值得注意的一点是,默认情况下 `QListView` 显示为单列垂直排列的形式;如果希望调整项目的呈现样式,比如按照网格模式展现的话,可以通过修改相应的属性来进行定制化开发[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值