Skip to content

RealChuan/Qt-Examples

Repository files navigation

Qt的一些简单常用示例

Battery——电池控件

BatteryQuick--电池控件(QtQuick

Bootstarp--程序开机自启动设置和检测

  1. Windows下读写注册表实现开机自启动,有两个位置可以写入;

    HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run //对于所有用户
    HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run // 对于当前用户
  2. MacOS下拷贝plist文件到~/Library/LaunchAgents/,使用launchctl load/unload命令实现开机自启动;

  3. Ubuntu下有两种方式:

    1. 使用systemctl --user enable/disable命令实现开机自启动;
      1. 拷贝.service和.timer文件到~/.config/systemd/user/,使用systemctl --user enable/disable命令实现开机自启动;
      2. systemctl命令用于.timer文件,.timer文件用于定时执行.service文件,防止图形界面启动后,出现qxcbconnection: could not connect to display错误;
    2. 把/usr/share/Application/下的.desktop文件拷贝到~/.config/autostart/下,实现开机自启动(未验证);

BubbleWindow——气泡式对话框,也可作工具提示(ToolTip)

Chart——可视化图表绘制,参考使用 QChart 显示实时动态曲线 和QChart相关示例

图一、二动态曲线
图二坐标轴也会滚动

CheckBoxStandardItem——可以勾选的StandardItem,而且根据勾选状态自动更新父节点状态或者子节点状态

Clock——时钟

DashBoard——仪表盘

FlowLayout——流式布局,来自QT示例Flow Layout Example

DragDrop——简单控件拖拽,参考QT示例Drag and Drop Puzzle Example

HttpClient——http客户端

IconButton——支持Icon跟随状态切换的EventFilter和Button

ImageCarousel——简易图片轮播

GridViewModel——基于QListView的自适应宫图

LogAsynchronous——异步日志,开辟一个线程专门往文件里写日志,前后端分离

  1. 日志文件名:应用程序名(appname).时间(time,精确到秒).主机hostname.进程ID(Tid).log(.count),假如一天内写的单个日志大约接近1G,会自动加后缀(.1,.2.3...,以此类推)新建新的日志文件去写,每天0点依然会rollFile;
    1. 正常文件名:LogAsynchronous.2020-04-26-20-29-03.Youth.11828.log;
    2. 当日写日志接近1G,新建的文件名:LogAsynchronous.2020-04-26-20-38-55.Youth.11828.log.1;
  2. 日志格式:时间(time,精确到毫秒).线程ID(Pid).日志级别(debug).打印信息(msg).文件(File).行号(Line)。
    1. 比如:2020-04-26 20:38:55.818 2052 [Debug] 123456789qwertyuioplkjhgfdsa 8412789-File:(..\logAsynchronous\main.cpp) Line:(19);
  3. Qt-App,这个项目中也有对日志的封装,与本项目的代码大致一致,由于两个项目更新频率可能不同,建议在查看日志模块时,同时检查Qt-App的最新更新。

MulClient——多线程客户端,一个线程一个客户端(怎么可以绕开系统限制,模拟百万个客户端)

MulServer——多线程服务端,一个线程一个客户端处理(处理实时性很高的TCP通讯)

NavigationProgressBar——导航进度栏

PasswordLineEdit——密码输入框

ProgressArc——圆弧进度条

ProgressBar——QProgressBar圆角替代方案

ReactorServer——多线程服务端,Reactor模式(Echo)

SimpleUdp——简单UDP例子,广播和接收

ShowInMyComputer——在我的电脑中显示当前应用程序

防火墙白名单。

SlipButton——滑动按钮

另:更简单的实现:有动画效果的 CheckBox

SqliteWAL——Sqlite WAL 模式下多线程并发写入数据库程序

WAL模式的优点

  1. 提高了并发性:WAL模式允许多个读取器和一个写入器同时访问数据库,可以提高并发性能和性能;
  2. 崩溃恢复:WAL模式在发生崩溃时确保数据库保持一致,通过在提交事务之前将所有更改刷新到日志文件来实现;
  3. 改进了写入性能:WAL模式允许并发写入,可以比默认的回滚模式更好地改进写入性能;

WAL模式的注意事项

  1. WAL模式仅适用于SQLite 3.35.5+版本;
  2. 增加了磁盘使用量:与回滚模式相比,WAL模式需要更多的磁盘空间,因为它在提交更改之前将所有更改都写入日志文件;
  3. 读取性能较慢:在WAL模式下,读取操作不会被写入操作阻塞,如果同时进行读取和写入操作,可能导致数据不一致。

TableViewModel——表格视图

  1. 各种自定义代理
    1. ButtonDelegate
    2. ComboBoxDelegate
    3. ProgressBarDelegate
    4. RichTextItemDelegate
    5. StarDelegate----来自Qt示例Star Delegate Example;
  2. 十万级数据渲染;

Thread——多线程例子,6种写法

TreeViewModel——树形视图(MVC),QtCreator源码

Validator——加强版IntValidator(QIntValidator)和DoubleValidator(QDoubleValidator)

packaging——打包脚本

  1. macos
    1. qmake 编译;
    2. 打包pkg和dmg包并签名(python/appdmg),具体可以参考Qt-App
  2. ubuntu
    1. qmake 编译;
    2. 打包deb包可以参考Qt-App
  3. windows
    1. qmake 编译;
    2. signtool 签名;
    3. Inno Setup打包可以参考Qt-App,签名的话可以把sign.bat中的签名脚本复制到Inno Setup工具中的Tools->Configure Sign Tools,然后在需要的文件后加上sign flags;