首页 > 其他分享 >View与Widget,以QListView与QListWidget为例

View与Widget,以QListView与QListWidget为例

时间:2023-08-28 17:27:06浏览次数:41  
标签:Widget QListView Qt 创建 QListWidget View

目录

在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应用程序界面。

标签:Widget,QListView,Qt,创建,QListWidget,View
From: https://www.cnblogs.com/faithlocus/p/17662857.html

相关文章

  • 如何在一个QWidget中加载一个gif作为背景
    如何在一个QWidget中加载一个gif作为背景思路来源:http://daniel-albuschat.blogspot.com/2009/07/background-animation-for-qt-widgets.html概括为使用QMovie渲染背景,具体示例代码如图......
  • AWC数组显示框aw-widget初始加载时没有把数组显示出来的问题
    1、html<aw-widgetprop="data.aaaa"></aw-widget>2、model.json"aaaa":{"displayName":"aaaa","type":"STRINGARRAY","isRequired":......
  • QT设置widget背景图片
    首先说方法,在给widget或者frame或者其他任何类型的控件添加背景图时,在样式表中加入如下代码,指定某个控件,设置其背景。类名#控件名{填充方式:图片路径}例如:QWidget#Widget{border-image:url(:/resource/bg2.png);}或者QFrmae#frame{border-image:url(:/resou......
  • Widget、Element、RenderObject三者之间的关系
     Widget不是真正渲染UI的对象,它只是Element的一个配置描述,去通知Element应该如何去渲染,Widget和Element之间是⼀对一的关系Element持有RenderObject和Widget。RenderObject才是实际渲染的对象,三者的关系是:配置⽂件Widget⽣成了Element,⽽后创建RenderObject关联到Element......
  • StatefulWidget 的生命周期
     https://zhuanlan.zhihu.com/p/500617966 安卓onCreateonStartonResumeonPauseonStoponDestroyiOSviewDidLoadviewWillAppearviewDidAppearviewWillDisappearviewDidDisappearviewDidUnloadfluttercreateStateinitStatedidChangeDependencies//此组......
  • Could not find a generator for route RouteSettings("search", null) in the _Widge
    遇到这个错误消息意味着在您的Flutter应用程序中没有为名为"search"的路由定义路由生成器。要解决此问题,您需要定义一个路由生成器来处理名为"search"的路由。以下是如何在Flutter应用程序中定义路由生成器的示例:首先,定义一个路由生成器函数,该函数接受 RouteSettings 对象并返回......
  • odoo15自定义小部件widget
    添加自定义widget的步骤比较简单,以下三步就可以了:1、JS实现widget的功能/*这个文件(文件名为my_basic_fields.js)要在__manifest__.py中设置,如下:'assets':{'web.assets_backend':['testaddons/static/src/js/my_basic_fields.js',],},*/odoo.define(�......
  • Qt 之 QWidget QLabel
    @TOC前言一、Qt工程介绍QtCreator以工程项目的方式对源码进行管理一个QtCreator工程包含不同类型的文件。a-.pro.user用户配置描述文件-.h头文件.cpp源文件.ui界面描述文件资源文件(图片,音频,等)pro项目描述文件的基本组成#一注释起始符:以“#”开始,到这一行结束。快捷键:C......
  • 【Qt6】QWidgetAction 的使用
    在开始主题前,先看一个C++例子:#include<iostream>structData{inta;intb;};//注意这里structData*s;voiddoSome(){Datak;k.a=100;k.b=300;//注意这里,会出大事s=&k;}intmain(){//先调用了函数doSo......
  • TabWidget的mapFromParent()
    这里不细说mapFromParent()的具体用法:说一下工作中发现的QTabWidget使用mapFromParent的问题:先看下图:它的父子关系: (红字部分属于意外发现,本文关注点不是这个。) 接下来:(textLabel的ui界面显示的x,y就是50,50). mapFromParent:登场: 很明显tabWidget的坐标系应该如下: ......