在DelegateItem中使用UI界面设计
摸索出来的东西,不一定靠谱。记录下来免得忘记了。
在TabWidget等里面补充: 后来在手册中发现, 对于QTabWidget, QListWidget这类, 直接使用setWidget()方法就可以直接实现, 不需要这么复杂.
对于需要在List/Table等里面嵌入控件的场景来说, 使用View类本身就是小题大作, 用Widget类就够了.
在DelegateItem中使用UI界面设计尝试将Creator设计的UI界面通过ItemDelegate来显示。1. 利用Creator创建一个Widget首先,利用Creator创建一个QWidget的UI和类,名字为SlideItemDelegate最简单的做法是修改SlideItemDelegate的基类,它本来是一个QWidget的派生类,我们将其改为QStyledItemDelegate的派生类。然后,将原先的QWidget放到它的类成员中。并添加QStyledItemDelegate需要重载的函数。如下:
1234567891011121314151617181920namespace Ui {class ...
使用QGraphicsWidget
在QGraphicsView框架中使用QGraphicsWidget基本模式一般来说, QGraphicsView框架是用来显示图元的, 但是有的时候我们也需要能够在View里面显示一些控件. 这个时候, QGraphicsWidget, 或者说QGraphicsProxyWidget 就派上用途了. 在大多数情况下, 它们还会需要和QGraphicsLayout配合使用, 当然也可以不用.
这种使用方式和我们使用一般的Widget控件的模式也是基本类似的:
先创建一个QGraphicWidget的控件, 作为一个控件的容器, 就像我们创建一个QWidget作为容器一样.
再创建一个QGraphicsLayout的具体派生类示例, 作为布局
然后可以创建QGraphicsProxyWidget, 并添加到布局里面
最后, 将这个widget添加到QGraphicsScene里面:
例如, 下面的模式:
123456789101112131415161718192021222324// 创建一个QEdit和QPushButton控件QTextEdit *edit = new QTe ...
Qt获取屏幕等的信息
Qt获取屏幕等的信息窗口大小信息使用三个函数:setGeometry(), resize(), move().
参见
控件的位置信息返回相对于Widget的位置:QPoint QMouseEvent::pos()
鼠标的全局坐标:QPoint QMouseEvent::globalPos()const QPointF &QMouseEvent::screenPos() const
相对显示器的坐标QPoint QCursor::pos() [static]它和前面的QMouseEvent::globalPos()相等.
窗口坐标转换成显示器坐标QPoint QWidget::mapToGlobal(const QPoint & pos) const
显示器坐标转换成窗口坐标QPoint QWidget::mapFromGlobal(const QPoint & pos) const
窗口坐标转换成父类widget的坐标QPoint QWidget::mapToParent(const QPoint & pos) const
将父类窗口坐标转换成当前窗口 ...
第9章 状态机
第9章 状态机9.1 状态机
第8章 数据结构
出差回来今天找项目组聊了一下,他们最近跑去终端的人不少。问了一下现在5G这块问题多不多,说还是挺多的,设计遗漏还是不少,天天都在开会。不过我负责的设备组网,载波配置,软件管理这三块没啥问题,人都被调去支援其他的人了。那就好。反正我也快要走人了。走了之后留一摊子问题让后人解决就太丢人了。最好是现在这样,我出去一个月没人找还没有问题。
第8章 数据结构linked list,LL,链表
8.1 规格定义TLA中,一般把数据结构表示为函数或结构(它实际也是函数)。为了方便,module应有一个叫LinkedLists(Nodes)的operator,来生成所有的有效的链表集合。它是一个function set形式:[Nodes -> Nodes]
一步步来先定义所有可能的结点的映射:
12PointerMaps(Nodes) == [Nodes -> Nodes] LinkedLists(Nodes) == \* ...
然后考虑链尾(final node),它指向一个null,因此我们要定义NULL,在CONSTANT 里定义,并且要确保没有结点为NULL一一需要断言,使用 ...
第7章 算法验证
这两天又在扯速率协商的事情!
第7章 算法验证这一章会讲述如何用TLA+编写和验证算法。所谓验证算法,指的是算法会终止且输出结果,而不是一直跑下去或不断与环境交互
7.1 单过程(Single-Process)算法模板:
123456789101112131415161718---- MODULE name ---- EXTENDS \* whatever Expected(input) == \* ...Helpers == \* ...(*--algorithm name variables input \in \* ... output; \* ... \* helper variables begin \* algorithm implementation assert output = Expected(input); end algorithm; *) ====
内容:
Expected
Helpers
inputs
output
7.2 Max7.2.1 算法分析设计计算一个sequence的最大值。例 ...
第6章 时间逻辑Temporal Logic
第6章 时间逻辑Temporal Logic检查程序本身的行为(原文中叫behavior)。
算法是否总能结束(terminate)
队列中的消息是否都能得到处理
当受到扰乱(disrupted)时,系统是否能够最终回到稳定的状态
数据库是否满足最终一致性
6.1 终止Termination检查算法是否最终能停止,而不会crash或陷入死循环
6.1.1 红绿灯的例子一辆车和一个红绿灯,分别是两个process:traffic light切换信号灯,car在灯变绿之前一直等待
1234567891011121314151617181920212223extColor(c) == CASE c = "red" -> "green" [] c = ”green“ -> ”red“(*--algorithm traffic variables at_light = TRUE, ❓at_light这个变量的作用不理解 light = ”red“; proc ...
第5章 并发
第5章 并发在并发(concurrent )系统中,没有单一的timeline 。两个概念:process, label
5.1 Label标签标签决定了规格中的原子性的粒度(grain of atomicity)TLC一"步(Step)"执行完一个标签定义的内容,然后检查所有的不变量并找出下一个可能要执行的所有的标签并进行测试。
⚠️不知是不是我的理解有错误。原文:Labels determine the grain of atomicity of your spec. TLC executes everything in a label in a single step, or action. Then it checks all invariants and looks for the next label to execute (action to take).这里的问题是,当标签内又有标签时点样行为?一个single step里执行最内层的标签还是最外层的?
pc,指的是"program counter",指的是当前所在的标签。
可以用goto 在本process 中跳转 ...
第三章 Operator和Function
第3章 Operator和Function
它的叫法很别扭,Operator以后叫"算子",Function 还叫"函数"。真难受!
3.1 Operator有些类似于一般编程语言中的函数/过程。无参数时不用写用==定义:
Op(arg1, arg2) == Expr
Op == Expr
它可以当宏用,也可以当变量用
垃圾桶例子中的改进:
若要在算子中用PlusCal算法中定义的变量,则要把它放在define块中:必须在宏定义之前,变量定义之后。
/\的特别的用法为了美观,第一个前面也可以放一个/\或\/这种:
缩进表示嵌套括号:
算子中支持Lambda和高阶函数LAMBDA和高阶函数
12345678Add(a, b) == a + b Apply(op(_, _), x, y) == op(x, y) >> Apply(Add, 1, 2) >> 3Apply(LAMBDA x, y: x + y, 1, 2) >> 3
集合++和—123set ++ elem == set \union {e ...
第4章 Constant, Model, Import
第4章 Constant, Model, Import
这一章主要是使用。不对着工具很难记得住,不是很重要,记住几个概念就可以了。