其实我写文章也是边查资料边编辑的

有时候是怕自己的阐述不严谨,有时候是怕自己重复造轮子

就像有些人不停的教大家QLabel QDialog QWidget 个人是不屑的


命令模式

用 Qt's Undo Framework 来举例最恰当不过了

QUndoCommand Class 里简单介绍了下用法

class AppendText : public QUndoCommand
{
public:
AppendText(QString *doc, const QString &text)
: m_document(doc), m_text(text) { setText("append text"); }
virtual void undo()
{ m_document->chop(m_text.length()); }
virtual void redo()
{ m_document->append(m_text); }
private:
QString *m_document;
QString m_text;
};

Qt Undo Framework 里详细描述了4个类的用法和注意点

Qt Undo Framework Demo 里翻译了官方的一个例子


观察者模式

这个自然是用 Qt 的 signal-slots 机制来举例了

DevBean Tech World 豆子是很早的 Qt 博主,这篇文章也写的很详细,就不狗尾续貂了

一般大家都喜欢大谈特谈 QObject::connect 函数的前4个参数

其实第五个参数才值得被讨论讨论

Threading Basics

You’re doing it wrong…(QThread with SIGNAL-SLOT)

Threads Events QObjects

QThreads general usage

Threading without the headache - Qt Blog

接下来可以谈谈的是 connect 里的参数类型,必须是可以转义成 QVariant 的类型

如果用了自定义类型,需要通过 qRegisterMetaType 或 Q_DECLARE_METATYPE 来注册

Differences between String-Based and Functor-Based Connections

然后可以一提的是 QObject::connect 函数是线程安全的

Reentrancy and Thread-Safety

最后可以说说 connect 和 lambda 的结合,这是 Qt5 的特性

connect(action, &QAction::triggered, engine, [=]() {
engine->processAction(action->text()); });

顺便说下 disconnect 函数

这个函数不要在析构函数里显示的去调用它

很多人以为 connect 和 disconnect 应该像 new 和 delete 一样成对出现

这是错误的

只要 sender 或 receiver 其中之一不存在了,connect 会自动失效

https://zhuanlan.zhihu.com/p/32138947

很多人以为 connect 和 disconnect 应该像 new 和 delete 一样成对出现 这是错误的(只要 sender 或 receiver 其中之一不存在了,connect 会自动失效。QObject::connect 函数是线程安全的)的更多相关文章

  1. Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......

    2019-08-14起笔 小熊的情况描述: 父类A继承自QWidget,所以父类A自动添加了Q_OBJECT.  子类B继承自父类A,子类B没有添加Q_OBJECT.在子类B中给动态创建的控件添加事件 ...

  2. Qt - 错误总结 - QObject::connect: Cannot queue arguments of type 'PVCI_CAN_OBJ' (Make sure 'PVCI_CAN_OBJ' is registered using qRegisterMetaType().)

    背景:一个线程通过signal-slot发送PVCI_CAN_OBJ类型的值到主线程中, 错误提示: QObject::connect: Cannot queue arguments of type ...

  3. QT运行出错:QObject::connect: Parentheses expected以及QObject::connect: No such slot ***

    我在QGraphicsScene子类中添加了item的弹出菜单,并连接Action到槽函数,结果槽函数不起作用,输出:QObject::connect: No such slot ***  C++ C ...

  4. Qt error ------ no matching function for call to QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))

    connect(ui->spinBox_luminosity,&QSpinBox::valueChanged, ui->horizontalSlider_luminosity, & ...

  5. QObject::connect可以对不继承QObject的类也使用信号槽

    #include <QCoreApplication>#include <QDebug>#include <QObject>#include <QThread ...

  6. Qt多线程编程中的对象线程与函数执行线程

    近来用Qt编写一段多线程的TcpSocket通信程序,被其中Qt中报的几个warning搞晕了,一会儿是说“Cannot create children for a parent that is in ...

  7. Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程

    Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...

  8. Linux可重入函数和线程安全的区别与联系(转)

    *****可重入函数 函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入. 当程序运行到某一个函数的时候,可能因为硬件中断或者异常而使得在用户正在执行的代码暂时终端转而 ...

  9. 可重入函数、线程安全、volatile

    一. POSIX 中对可重入和线程安全这两个概念的定义: Reentrant Function:A function whose effect, when called by two or more  ...

随机推荐

  1. Redis 操作集合数据

    Redis 操作集合数据: > sadd set1 Tom // sadd 用于往集合中添加元素 (integer) > sadd set1 John (integer) > sad ...

  2. 团购已满,O2O只是个笑话吗?

    团购的用户习惯经过多年的“发酵”以后,大多数用户的团购习惯已经养成,同样一张电影票团购和直接现场购买的差价在一倍以上,当然O2O领域的其他情况也差不多,面对明显的“优惠”,用户当然乐意使用团购服务. ...

  3. phpStorm中使用xdebug断点调试php代码

    配置好xdebug,也能使得phpstorm像java哪像跑断点调试,爽的一笔!!! 下载xdebug并配置 [XDebug] zend_extension=php_xdebug-2.4.0rc3-5 ...

  4. iOS UIImage:获取图片主色调

    本文转载至 http://www.wahenzan.com/a/mdev/ios/2015/0325/1677.html -(UIColor*)mostColor{ #if __IPHONE_OS_V ...

  5. 使用CreateProcess创建新的process 并返回process运行结束返回值

    转自:http://blog.csdn.net/zgl7903/article/details/5975284 转载这篇主要是记住:获得create的新进程运行结束时的返回值的方法 如下:   #in ...

  6. HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP错误解决方法

    在树莓派上运行在windows上正确的程序,  报错: HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP OpenCV Error: Assertion failed (s ...

  7. vim 正则替换【转】

    :[range]s/from/to/[flags] range:搜索范围,如果没有指定范围,则作用于但前行. :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换: ...

  8. Qt编写数据库通用翻页demo(开源)

    在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显示所有记录 ...

  9. 【SpringCloud微服务实战学习系列】配置详解

    前言 Spring Boot针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容. 一.配置文件 Spring Boot的默认配置文件位置为src/main.reso ...

  10. LeetCode 19 Remove Nth Node From End of List (移除距离尾节点为n的节点)

    题目链接 https://leetcode.com/problems/remove-nth-node-from-end-of-list/?tab=Description   Problem: 移除距离 ...