View与Widget,以QListView与QListWidget为例

发布时间 2023-08-28 17:16:00作者: flxx

在Qt框架中,"View"与"Widget"是两个关键概念,它们在用户界面设计和数据展示中发挥重要作用。本篇博客将介绍"View"和"Widget"的区别与联系,然后使用Qt中的QListViewQListWidget两个类进行演示说明。

View与Widget的区别和联系

View:

  • 视图(View)是Qt框架中用于显示数据的部分,通常用于呈现模型中的数据。
  • 视图本身不包含数据,而是通过模型(Model)来获取和展示数据。
  • Qt提供了多个视图类,如QListViewQTableViewQTreeView等,用于以不同方式呈现数据,如列表、表格和树形结构。

Widget:

  • 窗口部件(Widget)是Qt中的基本GUI控件,用于创建用户界面的各种元素,如按钮、文本框等。
  • 窗口部件能够直接与用户交互,并可以包含其他窗口部件或视图。
  • QWidget是Qt中所有窗口部件的基类,其他窗口部件如QLineEditQPushButton等都是其子类。

虽然视图(View)和窗口部件(Widget)在一定程度上有联系,但它们在用途和特性上存在显著区别。

如何正确使用QListView与QListWidget

使用QListView:

  1. 创建QListView实例: 在界面上创建一个QListView部件,可以通过Qt Designer进行设计。

  2. 设置模型: 创建一个数据模型(如QStandardItemModel),并将其设置给QListView

  3. 自定义展示: 根据需要,可以创建一个委托类继承自QStyledItemDelegate,以自定义列表项的外观。

使用QListWidget:

  1. 创建QListWidget实例: 在界面上创建一个QListWidget部件,可以通过Qt Designer进行设计。

  2. 添加列表项: 使用addItem()方法添加需要显示的列表项。

  3. 自定义项: 可以通过设置项的属性,如图标、文本等,来定制每个列表项的外观。

  4. 连接信号槽: 使用信号槽机制连接QListWidget的信号,以响应用户的交互操作。

代码演示

在这个示例中,将展示如何创建一个简单的列表视图和列表窗口部件,并向它们中添加项。

#include <QApplication>
#include <QWidget>
#include <QListView>
#include <QListWidget>
#include <QStringListModel>
#include <QVBoxLayout>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget mainWindow;

    // 创建QListView
    QListView listView;
    QStringListModel listModel;  // 创建数据模型
    QStringList dataList;         // 创建数据列表
    dataList << "Item 1" << "Item 2" << "Item 3";
    listModel.setStringList(dataList);  // 将数据列表设置到模型
    listView.setModel(&listModel);      // 将模型设置到视图

    // 创建QListWidget
    QListWidget listWidget;
    listWidget.addItem("Widget Item 1");
    listWidget.addItem("Widget Item 2");
    listWidget.addItem("Widget Item 3");

    // 在主窗口中布局
    QVBoxLayout layout(&mainWindow);
    layout.addWidget(&listView);
    layout.addWidget(&listWidget);

    mainWindow.setLayout(&layout);
    mainWindow.setWindowTitle("Qt ListView and QListWidget Example");
    mainWindow.show();

    return app.exec();
}

image

在这个示例中,我们创建了一个简单的应用程序,其中包含一个QListView和一个QListWidget。我们使用了一个QStringListModel作为QListView的数据模型,并通过setStringList方法设置了数据。对于QListWidget,我们使用addItem方法添加了几个列表项。

这个示例演示了如何创建、设置模型、添加数据以及在窗口中布局QListViewQListWidget。您可以根据自己的需求进一步扩展和定制这个示例,以实现更复杂的功能和界面。

总结

在Qt中,"View"和"Widget"是两个关键概念,用于展示数据和创建用户界面元素。视图(View)主要用于显示数据,而窗口部件(Widget)则用于直接与用户交互。QListViewQListWidget是其中的两个例子,前者是一个通用的视图类,后者是一个直接的列表型窗口部件。理解它们的区别与联系,以及正确使用它们,将有助于创建功能丰富且易于交互的Qt应用程序界面。