QT 在非多线程的情况下处理耗时事务

需求 在 qt 中既需要处理耗时任务,又不想使用多线程。 解决 可以在处理长时间耗时任务时,在耗时任务中周期性的调用 qApp.processEvents();, 这样可以让 qt 间断性的处理界面事务。比较推荐的是配合使用 QProgressDialog, 这样可以有进度条提示用户。代码如下: bool MyApp::writeFile(const QString &filename) { QFile file(filename); ... QApplication::setOverrideCursor(Qt::WaitCursor); QProgressDialog progress; progress.setWindowTitle(tableData->sNameCH); progress.setLabelText(QStringLiteral("数据保存中,请稍候...")); //progress.setCancelButton(0);//不显示“取消”按钮 progress.setCancelButtonText("取消"); progress.setRange(0,rowCount ); progress.setModal(true); //此处没有调用show()来显示,是因为QProgressDialog会自动决定是否显示 //如果时间过短,就不会显示。 for(int r = 0; r != rowCount; ++r) { progress.setValue(row); //如果用户单击了“取消”,就取消保存文件,并删除该文件。 if(progress.wasCanceled) { file.remov(); return false; } for(int c = 0; c != colCount; ++c) { out << table(r,c); qApp.processEvents(); } } QApplication::restoreOverrideCursor(); } 参考 Qt 如何处理密集型耗时的事情 QApplication::processEvents的作用

2023-02-20 · 1 min · 70 words · RamLife

优化冒泡排序

需求 需要写一个优化后的冒泡排序。 解决 为了简化代码,并且省去控制用的 flag,可以每次只排列剩余中的最小的,这 样可以使用 i 来同时控制排列的范围和当前最小的位置,使用 j 来控制进行比较的位置。 需要注意: i 的表示控制排列的范围和当前最小位置,所以 i 的取值不包含最后一个数,毕竟比较至少要有两个数才能比较。 j 是进行比较的数值,所以 j 是从 i 的后一个数开始,直到最后一个数。 public static void bubbleSort(float[] src) { for (int i = 0; i < src.length - 1; i++) { for (int j = i + 1; j < src.length; j++) { if (src[i] > src[j]) { float tmp = src[i]; src[i] = src[j]; src[j] = tmp; } } } }

2023-02-20 · 1 min · 70 words · RamLife

Android Studio 统计项目代码行数

需求 编写注册资料中,有一项是统计代码行数,所以需要获取在 android studio 中项目的代码行数,正常来说代码行数包含源码行数和注释行数。 解决 安装插件 在 android studio 中,依次点击 File -> Settings -> Plugins, 然后搜索 statistic, 点击安装。 使用插件 在屏幕下方 logcat 那一行,找到 statistic, 打开后,点击左上角的 refresh 第一个是 overview, 可以根据自己的需要点击 java 页面,就可以看到总的代码行数了。 参考 Android Studio 统计代码行数插件—{Statistic} Android studio统计代码行数 Android Studio 统计项目代码总行数

2023-02-20 · 1 min · 40 words · RamLife

ubuntu 切换 root

需求 ubuntu 如何从普通用户提高到 root 用户 解决 一般 linux 切换到 root 用户,就几种命令,试一试就可以了。 sudo -i su su -i 参考 ubuntu如何切换到root用户 Ubuntu进入root权限命令——sudo和su命令详解

2023-02-16 · 1 min · 19 words · RamLife

双屏位置更换

需求 当电脑的两个屏幕的实体位置发生了变化,希望鼠标在移动时,也能在正确的方向和位置出入双屏. 解决 桌面右键, 选择 display settings. 在 display 的界面中, 可以使用鼠标拖拽两个屏幕,使得他们的相对位置符合当前的实际位置. 点击 apply 即可 参考 使用扩展屏时设置鼠标切换到另一屏幕的方向

2023-02-15 · 1 min · 16 words · RamLife

清除已有网络驱动器

需求 当网络驱动器的登陆名,密码等修改之后,无法登陆时,需要清除已有的网络驱动器,并重新创建,如果有大量的映射需要删除,一个一个删比较麻烦。 解决 使用 ctrl + r, 打开运行窗口,输入 net use * /del, 然后在窗口中输入 y 即可清除所有已有的网络驱动器。 参考 关于windows映射网络驱动器,登录时重新连接

2023-02-15 · 1 min · 17 words · RamLife

换行符的转换

需求 windows 平台复制到 linux 平台的文件,换行符需要转换到 linux 模式,需要相应的批量转换方式。 解决 使用 dos2unix 即可。 安装 sudo apt install dos2unix 使用 dos2unix path/ 参考 Linux、Windows、Mac换行符相互转换方法

2023-02-15 · 1 min · 21 words · RamLife

定义可变参数的函数的宏

需求 在 Linux 平台下运行程序时,需要通过 syslog 打印日志,syslog 本身是可变参数的函数,所以需要一个可变参数的宏来定义在 linux 平台下的函数。 解决 在 C++ 中,可变参数宏的写法是: #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__), 满足需求的代码如下: #ifdef Q_OS_LINUX #define LOG(priority, format, ...) syslog(priority, format, ## __VA_ARGS__) #else #define LOG(priority, format, ...) #endif 在 C 中,写法是: #define debug(format, ...) fprintf(stderr, fmt, __VA_ARGS__) 在 GCC 中,写法是: #define debug(format, args...) fprintf (stderr, format, args) 参考 不定参数的宏 函数 整理:C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用 c/c++巧用宏计算不定参数个数【不定参数】【宏】【#define】

2023-02-15 · 1 min · 63 words · RamLife

QT 在 win 平台编辑,在 Linux 平台调试

需求 需要在 windows 平台使用 qtcreator 编辑,在 linux 平台下编译并调试,综合考虑还是 samba 最简单适合。 解决 linux 设备建立 qt 的工程. 复制工程目录下的 .pro.user, 并重命名在后面增加 .linux 的后缀。 linux 设备开启 samba. 并把工程文件夹共享出来。 windows 设备把 samba 目录映射为网络驱动器。 windows 上的 qtcreator 打开 samba 中的工程,会提示工程有些问题,并让你重新选择编译工具。 qtcreator 会自动重命名原来的 .pro.user, 在后面追加一串字符。 在 linux 设备,复制工程目录下的 .pro.user, 并重命名在后面增加 .win 的后缀。 建立两个脚本文件,一个用来复制 .linux 覆盖当前的 .pro.user, 另一个是用 .win 来覆盖。 使用时,在 win 可以正常的进行代码编辑,在 linux 调试前,执行脚本,替换为 linux 的 .pro.user, 当调试完成后,返回 win 进行编辑时,再替换成 win 的 .pro.user. 参考 ubuntu 20.04 安装配置Samba服务,Windows 和 linux协同工作

2023-02-15 · 1 min · 72 words · RamLife

Ubuntu 20.04 安装配置 samba

需求 需要在 win 平台编辑代码,在 linux 平台进行编译和调试。这种情况只能使用 samba 才比较方便,nfs 必须双方都是 linux。 解决 安装 samba sudo apt install samba samba-common 共享目录 对于需要共享的目录可能需要使用 chmod 修改权限 如果共享的目录归属用户和 samba 用户一致,那么只要保证目录是 0755 即可 如果共享的目录归属用户组和 samba 用户的用户组一致,那么只要保证目录是 0775 即可 如果共享的目录归属用户和用户组和 samba 用户和用户组都不一致,那么只有修改目录权限为 0777 才可以。 chmod -R 777 /home/username/director 添加 samba 用户 添加已有用户为 samba 用户 sudo smbpasswd -a username 配置 samba 备份 samba 配置文件: sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 在配置文件最后增加: [workspace] #共享名,该共享标签,可随意取,该名字为在其他电脑上看到的共享名 comment = work directories #该共享描述 browseable = yes path = /home/username/work #共享路径 valid users = username writable = yes #writable用来指定该共享路径是否可写 guest ok = no #指定该共享是否允许guest账户访问 read only = no create mask = 0775 directory mask = 0775 重启 samba 服务 sudo /etc/init....

2023-02-14 · 1 min · 119 words · RamLife