/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
excited 啊老哥,a-b > 0 这种翻云覆雨循环都用上了,不知道是不是可以优化得飞快!
本苏最讨厌刻意写烂代码的人了,既不学术也不工程,全拉出去给 TCC 续一秒。
写明白了,错误和不当实现便无处遁形,implict 虽好,可不要滥用哦。
Qt 真是的,ByteArray 的 size() 是 int,但 IODevice 却用 qint64
要统一都统一,要用底层的区别化定义都用区别化定义,这么弄算什么,莫名其妙。
这一点还是 Rust 好,我以前还觉得它的数组用 usize 什么的很奇怪呢。
using BoxLayoutConfig = std::function<void(QBoxLayout*)>;
BoxLayoutConfig withDefaults = [](QBoxLayout*){};
auto verticalLayout(BoxLayoutConfig init, QWidget* childs...) -> QVBoxLayout* {
auto lay = new QVBoxLayout; init(lay);
va_list ap; va_start(ap, childs);
for (QWidget* child = va_arg(ap, QWidget*); child != nullptr; child = va_arg(ap, QWidget*)) {
if (child->isWidgetType())
lay->addWidget(child);
else lay->addItem(reinterpret_cast<QLayoutItem*>(child));
}
va_end(ap);
return lay;
}

改造是失败的,即便成功了运行时开销也太大,不如直接用 UI XML
所以其实 Qt 的 Widgets XML 用的一直就是一种很工程很民科的方法,为了解决这个问题也是很久以后才有了 Quick,其实还是不如 Kotlin 直接用 block 来得优雅。
Forwarded from Harry Yu
audiooutput_refactor.zip
8.2 KB
#Cplusplus #Qt 重构的一个示例,实在是重构不下去了,一看 Qt Widgets 的硬编码 layout geometry 就头疼。
Qt5 Widget 的动态调整自适配简直是魔法的,非得按 parent layout 架构器调用时间来算,隐式依赖。
要是顺序和当前调用栈有点出入,widget 信号甚至都不正常。
qt-sum.zip
1.3 KB
传统风格,利用 Qt Widgets
Functor, function style cast, function style initialization, constexpr, const blocks, noexcept, function style noexcept 🌚

你知道,C++ 里也有 functor 吗?不过 functor 就是效应器的意思,不是某个范畴的范畴。

在网上了解到 C++ 实现 vararg 有三种常用方法,第一种是 C 式的 <cstdarg>,然后是 C++ 正常的 <initializer_list> 调用时就用花括号 initialzer 和 new T[] {} 那个一样写,然后是 template 的高级做法,可以递归展开 template(模板特化)
和 template expand,就是 new T[] { args... } 的操作,属于比较元编程的做法。
这个是比较神经病的 approach,不内存泄漏要一个假设:Qt Widgets 全部管理好自己的 children,并且 destructor 也会正常 delete 掉所持有的东西。
qt-storage.zip
1.8 KB
第二个游戏也完成了 #Cplusplus #Qt