Qt界面开发实战:从布局到信号槽的完整示例
1. 为什么还要写一个Qt界面示例从项目定位说起说起Qt界面示例很多人的第一反应是这年头谁还用桌面界面但真到自己动手做一个要跑在用户电脑上的工具软件时才发现Web页面做得再花哨也比不上一个能直接访问本地文件、不依赖浏览器环境的原生程序来得踏实。我前阵子刚好用Qt写完一个某小型数据整理工具从空的工程一路折腾到能交给别人用的界面过程中踩了不少文档里不会明说的坑所以这篇博文就以这个示例为主线把一套完整Qt界面的搭建思路拆开讲清楚。这个示例本身不复杂一个主窗口顶部是一排搜索框和下拉框中间是一张可以实时筛选的数据表格底部状态栏显示当前记录数菜单栏和工具栏各放一个导出动作。听起来都是基础组件但它几乎覆盖了Qt界面开发里最常用到的五个知识点布局管理、核心控件、信号槽、样式表和资源文件。你要是刚接触Qt跟着这个结构走一遍就能有一个能跑的成品要是你已经会用Qt Widgets做点东西也可以重点看第四、第六节那里讲的是真正决定界面好不好维护的细节。在动手之前先回答一个绕不开的问题用Qt Widgets还是QML。我的建议很简单做传统桌面工具软件选Widgets做带复杂动画、触屏优先、需要跑在移动端的界面才考虑QML。Widgets是基于控件和布局的经典模式调试和控件的生态都很成熟表格、树、标签页这类业务组件直接用现成的就行。QML是声明式语法做动画确实顺手但排查问题多一层运行时环境对搭个表格就能跑的需求来说学习曲线不划算。我们的示例完全站在Widgets这边把精力放在业务逻辑上而不是反复调动画曲线。2. 环境准备与工程骨架从零搭出第一个可运行窗口2.1 安装套件与编译器选择搭建Qt界面的第一步不是写代码而是装对套件。从官方安装包装一个LTS版本建议同时勾选一套MinGW工具链和一套MSVC工具链。如果你只是自己写示例、自己跑MinGW就够了它不需要额外再装编译环境但如果哪天要把程序发给别人用或者要接入一些只提供了MSVC库的第三方模块你就会感谢自己当时多装了一套MSVC。安装时有一个文档里很少强调的细节安装路径不要出现中文和空格。我见过太多人把Qt装到D:\软件\Qt这种路径下后续用CMake构建时链接器偶尔会报一些莫名其妙的错误原因就是路径里的非ASCII字符或空格打乱了依赖搜索。这不是一定会出问题但没必要为了一个文件夹名给自己埋雷。2.2 CMake工程的最小骨架新版Qt官方示例已经全面转向CMake建议新工程也用CMake而不是老的qmake。qmake不是不能用只是新功能和新示例基本都在CMake这边社区问答里你搜到的解决方案也大多是CMake写法。一个最小工程只需要这样一份CMakeLists.txtcmake_minimum_required(VERSION 3.16) project(QtDemoApp) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt6 REQUIRED COMPONENTS Widgets) add_executable(QtDemoApp main.cpp mainwindow.cpp mainwindow.h ) target_link_libraries(QtDemoApp PRIVATE Qt6::Widgets)注意那三行CMAKE_AUTOMOC/AUTORCC/AUTOUIC分别对应Qt的三个预处理工具AUTOMOC负责处理信号槽相关的元对象代码AUTORCC负责把.qrc资源文件编译进程序AUTOUIC负责把.ui界面文件转成C代码。这三个开关不开你会看到一堆未定义的信号或者资源路径不生效的诡异问题。很多新手报错槽函数没有被调用根源往往是忘了开AUTOMOC。2.3 从main函数看事件循环工程里最核心的入口文件main.cpp其实很短#include QApplication #include mainwindow.h int main(int argc, char *argv[]) { QApplication app(argc, argv); MainWindow w; w.show(); return app.exec(); }这里有个初学者容易误解的点w.show()只是把窗口标记为可见真正的程序主循环是app.exec()。exec一进去Qt就开始派发事件鼠标点击、键盘输入、定时器、重绘请求全部走这个循环。exec返回时程序才结束返回值会作为进程的退出码。所以如果你在show()之后、exec()之前写了一段死循环代码窗口压根不会响应因为事件循环还没开始。主窗口类我建议直接用Qt创建向导生成的MainWindow模板它继承自QMainWindow天然带菜单栏、工具栏、状态栏和中央控件区。QMainWindow自己有一套内部布局你不能像普通QWidget那样直接把控件塞给它而是必须通过setCentralWidget设置中央控件然后往中央控件里放布局。这个规矩绕过了后面界面就会乱成一团。3. 界面布局与核心控件的实战组合别只放按钮3.1 布局管理器的使用逻辑很多人第一次接触Qt界面示例时最不适应的就是没有坐标。你不需要把一个按钮放到(100, 100)的位置而是告诉布局这个按钮在第几行第几列、窗口拉伸时它该怎么伸缩。这个思维转变很重要。用绝对坐标写界面的后果是窗口一放大控件全部停在原地系统字体一换文字和控件边缘互相挤压换一台高DPI屏幕整个界面直接错位。Widgets的布局管理器是容器思维常见的三种QVBoxLayout把控件从上往下排QHBoxLayout从左往右排QGridLayout按行列排。它们可以互相嵌套比如先在外面竖排里面某一行再横向摆几个控件。嵌套越深越灵活代价是维护起来要记得每一层是谁的布局所以示例里我控制在两层左右。3.2 组合一个可用的搜索表单以这个示例的顶部搜索区为例实际代码是这样组织的auto *searchEdit new QLineEdit(this); auto *typeCombo new QComboBox(this); typeCombo-addItems({全部, 收入, 支出}); auto *btnFilter new QPushButton(筛选, this); auto *searchLayout new QHBoxLayout; searchLayout-addWidget(new QLabel(关键字:)); searchLayout-addWidget(searchEdit); searchLayout-addWidget(new QLabel(类型:)); searchLayout-addWidget(typeCombo); searchLayout-addWidget(btnFilter); searchLayout-addStretch();这里有一个我反复用的小技巧addStretch()在末尾加了一段弹性空白。它的作用是吃掉多余空间让那一整排控件始终紧凑地挤在左边而不是被窗口拉伸得七零八落。如果你希望按钮靠右就在按钮之前加Stretch。这个弹性因子的机制本质是布局管理器按权重分配剩余空间理解之后几乎所有工具类界面都能排得干净。接下来把搜索区和表格挂到中央控件上auto *table new QTableWidget(this); table-setColumnCount(4); table-setHorizontalHeaderLabels({日期, 类型, 金额, 备注}); auto *centralWidget new QWidget(this); auto *rootLayout new QVBoxLayout(centralWidget); rootLayout-addLayout(searchLayout); rootLayout-addWidget(table); setCentralWidget(centralWidget);注意rootLayout是建在centralWidget上的这样CentralWidget就负责管理整个客户区窗口缩放时表格会自动跟着拉伸不需要你写任何resize事件的代码。3.3 表格控件的选型与配置表格是这类工具界面的主角。纯示例场景我直接用QTableWidget它的用法最简单把数据一行行用setItem塞进去单元格的显示、选中、编辑全是现成的。但你要清楚它的边界QTableWidget是表格控件数据全存在控件内部的Item树里适合几百上千行的中小规模数据。一旦数据量上到几万行、需要频繁排序和局部刷新就该换成QTableView配合自定义数据模型这是model/view架构的范畴性能和内存占用完全是两个档次。为了让表格好看一点两行配置建议写上table-horizontalHeader()-setSectionResizeMode(0, QHeaderView::ResizeToContents); table-horizontalHeader()-setSectionResizeMode(3, QHeaderView::Stretch);意思是最后一列自动撑满剩余宽度其他列按内容宽度自适应。这个细节直接决定了表格在不同窗口尺寸下给人的观感不做的话不是挤就是空。填数据时还有个语法陷阱后面第六节再展开。4. 信号槽机制把界面和业务逻辑真正串起来4.1 信号槽的连接方式与上下文对象界面控件只是脸真正干活的是信号槽。按钮被点击、输入框内容变化、下拉框选中项变化这些都是信号你要对这些事情做出反应就写一个槽函数再用connect把两者连起来。这个机制是Qt界面的命脉理解它才算摸到Qt的门。现代Qt推荐用这种新语法connect(btnFilter, QPushButton::clicked, this, MainWindow::onFilterClicked); connect(searchEdit, QLineEdit::textChanged, this, MainWindow::onSearchTextChanged);新语法最大的好处是编译期检查信号、槽、参数类型对不对编译时就能发现不用等到运行时打印一串警告。第二个参数也就是this在connect里叫做上下文对象它的作用是让Qt知道槽函数执行期间MainWindow这个对象还活着。一旦MainWindow被销毁连接会自动断开不会出现槽函数往一个已释放对象里乱写的野指针问题。忘掉这个参数会让崩溃变得时灵时不灵特别难查。4.2 筛选逻辑的完整实现这个示例里最核心的槽函数是筛选逻辑不复杂但代表了一类常见写法遍历表格行根据条件决定隐藏还是显示。void MainWindow::onFilterClicked() { QString keyword m_searchEdit-text().trimmed(); QString type m_typeCombo-currentText(); for (int row 0; row m_table-rowCount(); row) { bool visible true; QTableWidgetItem *noteItem m_table-item(row, 3); if (noteItem !keyword.isEmpty()) { if (!noteItem-text().contains(keyword, Qt::CaseInsensitive)) { visible false; } } QTableWidgetItem *typeItem m_table-item(row, 1); if (visible typeItem type ! QStringLiteral(全部)) { if (typeItem-text() ! type) { visible false; } } m_table-setRowHidden(row, !visible); } }这段代码里有三个细节值得记住。一是所有字符串比较之前都先判空因为item不一定存在你以为每一行都有四列数据实际可能有一个单元格是空的直接调用text()就是解引用空指针。二是Qt::CaseInsensitive让关键字匹配忽略大小写这是用户直觉里默认的行为不做的话会被当成Bug反馈。三是setRowHidden只是隐藏行数据还留在表格里重新筛选还能恢复这比删除行再重建高效得多也避免了撤销操作。4.3 跨线程更新界面的边界信号槽还有一个隐藏很深的特性连接类型。默认的Qt::AutoConnection会智能判断——如果信号和槽在同一个线程就直接调用如果不在同一个线程就转成队列连接把调用投递到槽所在线程的事件循环里排队执行。这个机制是好东西但很多人因此产生误解以为任意线程里都能直接操作界面。真相是任何线程里你都可以调用控件的方法但不一定安全。尤其子线程里直接改表格数据、弹消息框轻则界面闪烁、数据错乱重则直接崩溃。正确做法是让子线程发信号界面线程的槽函数里做更新或者用QMetaObject::invokeMethod把更新函数投递回主线程。判断标准就一句话改界面的代码必须跑在主线程的事件循环里。我在做后台数据导入时曾经图省事直接在子线程里加了上千个Item结果表格刷新卡死改成信号槽回主线程逐批插入之后才恢复正常。5. 用QSS和资源系统把界面做得像样一点5.1 QSS选择器与控件样式功能没问题之后界面观感才是决定程序看起来专不专业的关键。Qt自带一套样式表语法名字叫QSS写法跟CSS几乎一样不用重写整个控件的绘制代码就能统一按钮、表格、输入框的配色和圆角。这个投入产出比非常高值得每做一个Qt界面示例都顺手加上。一段最简单的全局美化QPushButton { background-color: #2d7ff9; color: white; border: none; border-radius: 4px; padding: 6px 16px; } QPushButton:hover { background-color: #409cff; } QPushButton:pressed { background-color: #1a5fd0; } QTableWidget { gridline-color: #e0e0e0; selection-background-color: #d6e8ff; }QSS的选择器有讲究QPushButton匹配所有按钮QPushButton:hover是鼠标悬停的伪状态QLineEdit#searchEdit表示匹配对象名是searchEdit的那个输入框。所以给关键控件设置setObjectName(searchEdit)非常有用它是用样式精确控制单个控件的入口。QSS里最让人困惑的是padding和border-radius的实际效果它跟浏览器里的CSS稍有差别但大体一致。改完样式第一件事是看不同缩放级别下控件是否走样因为QSS里的像素值是逻辑像素跟DPI有关这点后面单独展开。5.2 资源文件与图标的正确姿势工具栏和菜单栏总不能全是文字需要图标。Qt里图标的正式做法是放进.qrc资源文件编译时直接打进二进制避免发布时还要带一堆散落的图片文件。一个典型的资源文件长这样RCC qresource prefix/icons fileicons/export.png/file fileicons/refresh.svg/file /qresource /RCC代码里通过:/icons/export.png引用注意这个路径不是磁盘路径而是qrc内部的逻辑路径冒号开头是它的标志。很多新手在这个地方卡住写了相对磁盘路径当然找不到资源。QSS里也能引用资源图片做按钮背景但图标这种需求我建议用QIcon加载因为QIcon可以携带多种尺寸并自动随状态切换而QSS背景图在处理透明PNG和悬停态时容易踩坑。图标文件我强烈建议至少准备一套SVG矢量图而不是只放固定像素的PNG。原因很简单高分屏上PNG会模糊SVG可以平滑缩放配合Qt6的高DPI支持观感差距很明显。5.3 高DPI和字体适配讲高DPI之前先说结论Qt6在正常情况下已经默认开启了高DPI缩放程序在150%、200%缩放的屏幕上会自动把逻辑像素换算成物理像素不需要你写什么。如果你还要维护Qt5的老工程就得在main函数最前面设置缩放策略否则界面在放大缩小的屏幕上会糊成一团。真正容易被忽略的是字体。Linux发行版上Qt默认字体经常又小又难看Windows上中文在部分控件里也会出现锯齿。解决办法是在main里统一设置一次全局字体或者在QSS里用font-family指定一组字体栈。我个人的习惯是写* { font-family: Microsoft YaHei, PingFang SC, Noto Sans CJK SC; font-size: 13px; }注意*选择器会匹配所有控件这是全局兜底的最快方法。字体这块千万别依赖系统默认不同发行版、不同语言的系统默认字体差异极大你在一台机器上看着正常换台机器就露馅。6. 踩过的坑与调试心得Qt界面开发的经验清单6.1 布局与内存的连环坑做这个Qt界面示例的过程中有几类问题反复出现这里专门列出来希望能帮你省掉排查时间。第一个坑是控件new了却不显示。原因往往是控件没有加进布局也没有传父对象。在Widgets里一个控件的显示不仅取决于show()还取决于它的父对象链。如果你new QLineEdit之后忘了加进layout它虽然活着但没有任何父窗口来安排它的位置和可见性于是界面上一片空白。排查方法很简单检查构造函数里有没有传this或者有没有addWidget/addLayout这一行。第二个坑跟第一个相反同一控件被两处认领导致父对象链混乱甚至双删崩溃。QObject的对象树是Qt内存管理的核心每个对象只能有一个父对象析构时父对象会连带删除所有子对象。如果你把一个控件先setParent给A窗口又setParent给B窗口旧父对象会认为它已经失去这个儿子但代码里如果还持有裸指针并再次操作就很容易踩到悬空指针。6.2 动态更新与性能问题第三个坑出在QTableWidget的Item上。前面提过setItem必须传堆上new出来的对象auto *item new QTableWidgetItem(2025-01-01); table-setItem(row, col, item);这里的逻辑是QTableWidget接管了item的释放权表格销毁时它会负责delete所有item。如果你图省事在栈上构造一个临时item再setItem进去函数一结束栈对象就被回收表格里存着的是一个悬空指针迟早崩溃。这条规则对QTreeWidget、QListWidget同样适用。第四个坑是批量更新界面导致的卡顿。如果循环里要插入几千行数据每一行都触发一次重排和重绘界面会像掉帧一样一卡一卡。我试过的有效方案是给表格包一层table-setUpdatesEnabled(false); // 循环填充数据 table-setUpdatesEnabled(true); table-update();在禁用更新期间Qt不会立刻重绘数据全部填完再一次性恢复肉眼可见的流畅度提升。注意setUpdatesEnabled(false)期间不要调用repaint()这类强制刷新方法否则会失去意义。6.3 快速定位问题的调试手法最后分享几个我常用的定位手段。布局排错的时候在main里临时加一句QApplication::setStyleSheet(QWidget { border: 1px dashed red; });每个控件和布局的边界会立刻用红色虚线框显示出来谁多占了空间、谁没被布局管到一眼就看明白。这不是生产环境的写法但排查布局问题比读代码快十倍。对象树排查用Qt自带的dumpObjectTree()在某个顶层窗口上调用整个父子关系树会打到调试输出里。如果怀疑某控件没挂对父对象看这棵树比追代码更直观。信号有没有触发就在对应行打印qDebug日志这是最笨也最可靠的办法。千万不要一上来就怀疑信号槽语法新语法在编译期已经替你过滤掉绝大多数连接错误剩下多数是槽函数内部逻辑问题。至于事件循环卡死的排查记住一条铁律槽函数里不要写阻塞式的死循环不要用类似while(条件) {}空转等待某个外部事件。界面无响应十有八九是主线程被别人堵住了。遇到必须等待的场景改用异步信号槽或者定时器轮询这是桌面开发里维护界面流畅性的基本功。我在实际写这个示例时感触最深的一点是Qt界面的复杂度不在某个单一技术点上而在于布局、信号槽、样式、内存管理这些东西互相交织。每解决一个问题后面往往还藏着两三个连锁问题。但只要你能跑起来一个最小工程再一步步照这个示例的顺序添砖加瓦Qt反而是桌面领域里最有确定性的框架之一——它的规则清楚坑也基本都在明面上。希望这篇Qt界面示例的拆解能帮你少走几段弯直接站到能自己往下探索的位置上。

相关新闻

MapReduce实验全解析:WordCount入门与Writable分区实战

MapReduce实验全解析:WordCount入门与Writable分区实战

简介:围绕《大数据技术原理与应用》实验四“MapReduce初级编程实践”,这是一份覆盖面较全的课程实验参考文档,适合计算机专业学生、大数据初学者及MapReduce开发者用作入门练习。文档基于VMWare虚拟机、Ubuntu 18.04与Eclipse环境&#xff0c…

2026/10/12 13:47:58 阅读更多 →
从零搭建本地记忆中枢:claude-mem 分层存储与检索注入实战

从零搭建本地记忆中枢:claude-mem 分层存储与检索注入实战

1. 从零搭建一个本地记忆中枢:claude-mem 到底在解决什么问题第一次看到claude-mem这个名字,我脑子里蹦出来的第一个念头是:终于有人把“记忆”这件事从对话框里拎出来了。做过一段时间 AI 应用开发的人都知道,大模型本身是没有状…

2026/10/12 13:47:58 阅读更多 →
Python深度学习图像处理最小可行系统:工业级分类检测部署

Python深度学习图像处理最小可行系统:工业级分类检测部署

简介:本资源是一套基于Python与PyTorch实现的深度学习图像处理完整源码工程,面向计算机视觉初学者、算法工程师及高校研究者,聚焦图像分类、目标检测与语义分割等核心任务,提供从模型训练到服务部署的全链路实践参考。压缩包共436…

2026/10/12 13:46:58 阅读更多 →

最新新闻

AutoClaw智能体实战:从澳龙订单场景解析任务自动化与跨系统编排

AutoClaw智能体实战:从澳龙订单场景解析任务自动化与跨系统编排

1. 从一条热搜说起:这个项目到底在折腾什么前几天刷到一条挺有意思的消息,标题大意是某科技大厦里“游出”了澳龙,同时一个叫 AutoClaw 的智能体工具宣布上线。乍一看像是美食博主和科技博主串台了,但仔细一琢磨,这背后…

2026/10/12 14:46:14 阅读更多 →
从链接列表到知识入口:参考资源章节的系统化设计

从链接列表到知识入口:参考资源章节的系统化设计

作为常年维护技术文档体系和知识库的人,我对“参考资源”这章的感情很复杂。它通常是整个文档体系里最不被看好、也最容易被随手糊弄过去的部分——作者写完正文以后,把看过的链接一股脑堆在末尾,标注“参考资料”,就算交差了。但…

2026/10/12 14:46:14 阅读更多 →
从空文件夹到可玩游戏:用Claude Code和MCP自动化构建Unity项目

从空文件夹到可玩游戏:用Claude Code和MCP自动化构建Unity项目

1. 为什么我会用“空文件夹”当起点先说结论:这个项目本质上不是“写游戏”,而是“验证一套自动化开发流程能不能跑通”。事情起因是我在某次分享里看到有人用自然语言描述需求、让 AI 直接生成完整项目,我当时第一反应是不信。原因很简单&am…

2026/10/12 14:46:14 阅读更多 →
参考资源章不是附录,而是动态能力接口图

参考资源章不是附录,而是动态能力接口图

1. 这不是“附录”,而是一份可直接复用的资源导航图“第32章:参考资源”——看到这个标题,很多人第一反应是翻到书末、快速略过、甚至直接跳转下一章。但在我带过的十几个跨领域项目里,真正把这一章吃透、拆解、落地的人&#xff…

2026/10/12 14:46:14 阅读更多 →
Claude Code+MCP:从空文件夹到可玩Unity游戏

Claude Code+MCP:从空文件夹到可玩Unity游戏

几个月前,我坐在电脑前,盯着屏幕上那个空空如也的文件夹发呆。文件夹的名字叫“MiniGame”,创建时间五分钟前,里面什么都没有。我当时的念头很简单:有没有可能,我不动手写代码、不打开Unity编辑器&#xff…

2026/10/12 14:46:14 阅读更多 →
AI Agent决策模型Jev:从DOOM试验场到自动化测试落地

AI Agent决策模型Jev:从DOOM试验场到自动化测试落地

先说结论:这个项目不是让AI去通关DOOM,也不是给测试团队换一套自动化工具,而是用DOOM这类游戏环境逼出来的决策框架,去解决自动化测试里最让人头疼的“脚本一改全白改”问题。Jev是我在某个跨平台系统测试实践中逐渐搭起来的一个A…

2026/10/12 14:45:12 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →