---- 两者的区别: Item Views(Model-Based)的对象进行数据操作相对比较复杂,但处理及展示大数据量时性能高; Item Widgets的数据操作比较简单,但处理及展示大数据量时性能相对低...),操作方便,直接调用addItem即可添加项目(ICON,文字) 详细介绍可以看博客 “Qt入门-列表框QListWidget类” “Qt5.9中控件listWidget用法(QListWidget基本用法...Tree Widgets :提供了一个默认模型的部件,比较方便。...详细介绍可以看博客: “QTableWidget与QTableView的区别” “QTableWidget / QTableView的应用” ---- Column View :以模型/视图数据为基础的...详细介绍可看博客: “实战PyQt5: 078-撤销命令视图QUndoView” “Qt如何实现QTableView的撤消与恢复功能”
/ Qt具有简洁和方便的几个部件,用来作单列表选择,我们称之为列表框。...最灵活的方法是使用一个是Qlistview,它提供了一个必须由程序员定义UI视图、高度灵活的列表模式;一个简单的方法是使用QListWidget,它具有一个预先定义的基于项目的模型,用来处理常见的列表框...为QListWidget添加项目非常容易。...最重要的是currentItemChanged信号,它是当用户改变选择的项目时发出;它连接的槽接收两个参数,current和previous,表示现在和之前选择的QListWidgetItem项。...同样它也有对应的信号,当用户单击、双击、激活或按下一个项、改变选择的项目集时。
当标准模型还无法满足需要时,可子类化QAbstractItemModel、QAbstractListModel或QAbstractTableModel来创建自定义的模型。...常见的3种模型为列表模型、表格模型、树模型,如下图所示: 为确保数据的表示与数据获取相分离,Qt引入了模型索引的概念,输入和委托均可通过模型索引来请求数据并显示。...只有模型需要知道怎样获取数据,被模型管理的数据类型可以被广泛的定义。模型索引包含一个指针,指向创建他们的模型,使用多个模型时可避免混淆。...这些部件分别是QListWidget提供一个项目列表,QTreeWidget显示一个多层次的树结构,QTableWidget提供了一个以项目作为单元的表格。..."); //部件插入项目 listWidget.insertItem(1,listWidgetItem); //部件设置排序(降序) listWidget.sortItems
QJsonDocument类: 解析时: 参数 用途 QJsonArray array() const //通过get方法,得到QJsonDocument类中的json数组 QJsonObject object...1.1 基本概念 当一个数据有多个时,将数据以列表的形式来显示,使用QListWidget,但是,该列表控件只负责显示,致于列表的内容是什么,它并不关心,比如:字符串,单一控件,自定义布局界面等...1.2 创建该类对象的方法 通过构造函数来实现 QListWidget *listWidget = new QListWidget(this); 在qt 设计师,直接使用,则QT设计师来创建该对象...控件设置的条目 QWidget *widget ---- 给QListWidgetItem条目的具体内容为一个窗口小部件,比如:一个控件或者多个控件的界面 该函数要跟addItem(QListWidgetItem...*item)//双击条目时,控件会发送该信号 当用户在代码中,建立与该信号相关的槽函数时,那么信号触发时,就会执行槽函数
这三个组件与菜单栏、中央部件共同构成了 Qt 主窗口的 “五件套”,其布局位置如下: 工具栏:默认位于菜单栏下方或窗口边缘,支持多实例、可移动、可浮动。...4.1 浮动窗口核心特性与创建方式 4.1.1 核心特性 多实例支持:一个主窗口可以创建多个浮动窗口。 灵活停靠:可停靠在中央部件的上、下、左、右四个方向,支持组合停靠。...与中央部件联动:浮动窗口的显示 / 隐藏不影响中央部件的功能。...浮动窗口的核心价值是辅助中央部件实现功能,通过信号槽机制可实现两者的联动(如选择浮动窗口中的文件,中央部件显示文件内容)。...5.3 常见问题与解决方案汇总 5.3.1 浮动窗口无法停靠 原因:未设置中央部件,或停靠位置不在允许范围内。
QListWidget 是 Qt 中的一个列表框组件,用于显示一列项目,并允许用户进行选择。每个项目可以包含一个图标和文本,可以使用 QListWidgetItem 类来表示。...removeItemWidget(QListWidgetItem *item) 从列表中删除一个项目并释放与之关联的任何小部件。...itemClicked(QListWidgetItem *item) 项目被点击时发出的信号。...itemDoubleClicked(QListWidgetItem *item) 项目被双击时发出的信号。...setItemWidget(QListWidgetItem *item, QWidget *widget) 在给定项目的位置设置小部件。
,每一组小控件都显示在不同的选项卡中。...sys.exit(app.exec_()) 2、QStackedWidget容器控件类 QStackedWidget是一个堆栈窗口控件,使用QStackedLayout布局,可以填充一些小控件,但同一时间只有一个小控件可以显示...QStackedWidget控件与QTabWidget类似,可以有效地显示窗口中的控件。...将QListWidget的currentRowChanged信号与display()槽函数相关联,从而改变堆叠控件的视图。...,创建可停靠的窗口items,然后,在停靠窗口items内添加QListWidget对象,最后,将停靠窗口放置在中央小控件的右侧。
对话框为应用程序与用户通信提供了一种有效的方法,但是复杂的对话框会遇到这样的问题,即它们通常占用过多的屏幕区域。通过在对话框中使用多个标签,可以将信息分为不同的类别,同时仍可访问。...,每个小部件都包含有关文件的信息。...我们在不使用父窗口小部件的情况下构造了这些窗口中的每一个,因为选项卡窗口小部件会在将它们添加到父窗口小部件时使它们重新定位。 ...GeneralTab类定义 GeneralTab窗口小部件定义很简单,因为我们只对在选项卡中显示窗口小部件的内容感兴趣: class GeneralTab : public QWidget {...,并在以嵌套布局排列的小部件中显示文件许可权和所有者的详细信息: PermissionsTab::PermissionsTab(const QFileInfo &fileInfo, QWidget *parent
Class.forName ( )在运行的时候返回类名称 c. tr ( )用于国际化中的字符串翻译 d. metaObject ( )返回该类所关联的元对象 17以下关于 Q_OBJECT 叙述不正确的是...一个类可能含有多个元对象与之对应 29窗口部件的父类包括 a. QWidget b. QFrame c. QScrollView d....其实现只能在 QWindowStyle 类中通过重载来完成 32关于布局功能的叙述以下正确的是 a. 在布局空间中布置子窗口部件 b. 设置子窗口部件间的空隙 c....其中属性 int spacing 代表布局内的窗口部件的大小 d. 其中属性 ResizeMode resizeMode 代表布局的扩展方式 34布局窗口部件包括 a. QHBox b....应该熟悉 QListWidget 常用的一些方 法及信号和槽。
studentSlot)(QString) = &Student::treat; QString 转成 char* .toutf8 () 转为 QByteArray .Data () 转为 Char* 无参信号和有参信号与槽连接...: *studentSlot_1)(int) = &Student::treat; // 一个信号可以连接多个槽函数 QPushButton *btn_3 = new QPushButton("同时与槽连接...// 设置核心部件 最多有一个 QTextEdit* edit = new QTextEdit(); setCentralWidget(edit); 资源文件 将文件拷贝到项目位置下 右键项目 添加新文件...}); 标准对话框 错误对话框 信息对话框 提问对话框 警告对话框 参数 1 参数 2 参数 3 参数 4 参数 5 父类 标题 显示内容 按键类型 默认关联回车按键 返回值:也是 StandardButton...信息对话框 QMessageBox::information(this, "info", "信息"); // 提问对话框 // 参数1 父类 参数2 标题 参数3 提示内容 参数4 按键类型 参数5 默认关联回车按键
希望我的开发历程,能给同样想打造 “小而美” 桌面工具的朋友一些启发。一、梳理需求在下笔动工之前,我总喜欢先在纸(或 Markdown)上把需求写清楚。...调试时我竟然把它写在类外,结果拖半天没反应,真是无语。六、目录管理 DirectoryTreeDirectoryTree 负责展示用户要整理的顶级目录列表,我用 QListWidget 实现。...这样,绝大多数错误场景都能被优雅地处理,不至于让程序直接崩溃。...十一、美化界面与主题为了让工具看起来更专业,我补充了 resources/style.qss,简单示例:QMainWindow { background: #fafafa;}QListWidget...十四、总结回顾整个项目,从最初的“要不要花时间写”到“写完上手就能用”,大概花了一个周末加两天的精力。
的困难 缺点: 小型项目,反而会降低开发效率,虽然层与层之间相互分离,但之间关联性太强,没有做到独立的重用。...另:MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。...1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。...变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。...2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。 3、视图对模型数据的低效率访问。
表格、列表和树型窗口部件是 GUI 开发中经常会用到的窗口部件。传统的方式是窗口部件本身包含用于存储数据的内置容器。这种方式非常符合直观感受,然而,在许多复杂的应用中,这将导致数据的同步问题。...早期Qt使用的就是上述的方式。第二种方式是模型/视图编程,窗口部件无需维护内部的数据容器。它们通过标准的接口获取外部数据,也因此避免了数据的重复。...对于Qt的Model /View我们可以简单的划分为3种使用级别: ①Model /View的简便类 ②Model /View的预定义模型 ③Model /View的自定义模型 简便类:如QListWidget...那么接下来我们用一个小例子来了解下Model /View简便类的使用。...); tableWidget->setItem(row, 1, item1); tableWidget->setCurrentItem(item0); } 用户单击Add Row按钮时,
脑海里忽然闪过一个念头:如果有个桌面定时提醒器,能在指定时间提醒我休息、做番茄钟,甚至弹出一句鼓励的小语,岂不是美滋滋?更何况,我早就想借此练练 PyQt,打造一个属于自己的“效率小助手”。...一、需求与动机我给自己列了几个“非功能化”需求和“核心”需求:不想写成一堆分点,简单说说当时的想法。...,我遇到过几次莫名其妙的崩溃:有时用户把电脑从睡眠唤醒后,QTimer 会突然停止;有时声音文件加载失败;有时 JSON 配置损坏。...\ --add-data "resources/;resources/" \ main.py打包选项说明与之前项目类似。...biubiu~十三、优化方向和扩展项目基本达成最初设想,但后续还可以这样升级:支持系统启动时自动最小化到托盘; 增加统计面板,记录完成的番茄钟次数; 利用 matplotlib 绘制专注时间折线图,
因此,最直接的方法就是定义一个QListWidget,将这个QListWidget设置为QComboBox的View,而将QListWidget的Model设置为QComboBox的Model。...QListWidget只是一个View类,因此我们还得自定义View类中的Item啊。 ...(this); // 设置子项目代理,否则下拉框选项周围会出现虚线框 m_listWidget->setItemDelegate(new NoFocusFrameDelegate(this...()信号关联到了onChooseAccount()槽。...这样,当用户点击了选项中的某一个选项时,能够在QComboBox的文本框中显示选中的项。那么,QSS该如何编写呢?
信号与showTime()槽函数连接起来。...,由于PyQt的跨平台特性,QThread要隐藏所有与平台相关的代码。...在使用线程时可以直接得到Thread实例,调用其start()函数即可启动线程。线程启动之后,会自动调用其实现的run方法,该方法就是线程的执行函数。...QThread有started和finished信号,可以为这两个信号指定槽函数,在线程启动和结束时执行一段代码进行资源的初始化和释放操作。...如果窗口长时间没有响应,则会影响用户体验,更严重的会导致程序崩溃。所以,为了避免出现这样的问题,要使用QThread开启一个新的线程,在这个线程中完成耗时的操作。
但如果你用了框架,就相当于你有现成的轮子、门、座椅等部件,你只需要组装一下就可以了。...一个框架是一组可复用的设计构件 框架(Framework)是整个或者部分系统的可重用设计,是JavaEE底层技术的封装 框架是可以被开发者定制的应用骨架 框架是一个半成品,软件是成品。...企业项目中应该将应用的设计与实现技术解耦 提升了开发效率 企业项目中使用框架,只需要专注实现业务需求。...可重用性更好,同一个方法可以由多个类去调用 缺点 执行效率更低 开发工作量更大 会导致级联的修改,如果修改一个功能,导致三层都要进行修改 3....SQL语句和代码的分离,提高了可维护性 缺点: 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此 SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库 框架还是比较简陋,功能尚有缺失
在Flutter 2中,由于Flutter Web的出道,Flutter将代码重用能力提升到了另一个层次。所以,现在当你使用Flutter 2创建新项目的时候,web将成为新的支持平台。 ?...这使开发人员能够防止null错误崩溃(NPE),这是应用程序崩溃的常见原因。 通过将空检查合并到类型系统中,可以在开发过程中捕获这些错误,从而防止生产崩溃。...事实上,此版本合并了178个与iOS有关的PR,包括为iOS带来State Restoration的23495。67781,这可以让我们从命令行直接构建IPA,并不需要打开Xcode。...新的小部件:Autocomplete 和 ScaffoldMessenger AutocompleteCore是支持auto-complete(自动填充)的最小单位了。...AppBar动作创建SnackBar,创建在Scaffold转换之间持久保存的SnackBars的能力,以及即使用户导航到具有其他Scaffold的页面也能够在异步操作完成时显示SnackBars的功能
这使开发人员能够防止null错误崩溃,这是应用程序崩溃的常见原因。通过将空检查合并到类型系统中,可以在开发过程中捕获这些错误,从而防止生产崩溃。...此版本包括一个更新的Scrollbar小部件,该小部件在桌面环境中非常有效 滚动条小部件已更新,以提供桌面上预期的交互功能,包括拖动拇指,单击轨道以上下滚动页面以及在鼠标悬停在鼠标的任何部分上时显示轨道的功能...当我们接近Flutter桌面的第一个完整的生产质量版本时,我们知道我们还有更多工作要做,包括对与本机顶级菜单集成的支持,更像各个平台的体验的文本编辑以及可访问性支持,以及常规的错误修复和性能增强。...可用的修复程序列表,如带小灯泡的快速修复程序,可帮助您单击鼠标来更改代码。...图片发布 Flutter IDE扩展会在您的应用引发布局溢出异常时发出通知 按下该按钮可将您带到出现问题的小部件上的DevTools中的Flutter Inspector,因此您可以对其进行修复。