当有多个信号函数(Signal)绑定同一个槽函数(Slot)时,你会有这样的需求,在槽函数中我希望知道到底是哪个信号函数发送出来的信号,这样根据不同的发送者来执行不同的操作。想实现这个功能可以在槽函数中调用 sender() 方法获取发送信号的对象类型。然后进行处理,具体代码如下:

继续阅读

信号和槽是 Qt 独有的一种机制,他让窗口的各种消息处理简化到极致,常规情况下我们相应某窗口(控件)的点击时都需要自己投递消息到框架中,由框架的消息队列投递给不同的窗口消息处理函数来处理。如果使用信号和槽,需要声明信号、定义槽函数、绑定信号和槽、发射信号就可以完成上述功能,代码简单容易理解,逻辑简单易懂。信号和槽的大致实现图如下:继续阅读

键盘消息和鼠标消息没有什么差异,用法和覆写方法都差不多,可以通过传递的参数判断按下了哪些键,下面代码中有比较详细的示例。其中也介绍了一下定时器消息,当覆写一个定时器消息时,你需要调用 QWidget 的成员函数 startTimer 来启动定时器,它的参数是定时器多长时间运行一次,并且如果有多个定时器时,你还需要知道每个定时器的 ID 是多少,定时器消息因为哪个定时器触发了而运行。这些都在例子中有所体现。

继续阅读

在继承了 QWidget 窗口类以后,我们可以实现很多父类提供的虚函数,其中就包括鼠标的诸多消息处理函数,比如 mousePressEvent(鼠标单击消息)、mouseReleaseEvent(鼠标弹起消息)等等,这些虚函数我们可以通过 Qt 的帮助文档查看,如下:

继续阅读

QString 是 Qt 内部的一种字符串数据类型,QString 支持多字节编码(unicode)的一个字符串类。在程序和网络之间传输数据时,其他的程序和网络另一端的程序是不能识别他这种数据类型的。所以要想将 QString 类型的数据保存到文件或发送到网络,需要转换成 QByteArray 类型才可以。继续阅读

与 stl 和 boost 库中的链表差不多,都有我们常见的属性,如at、push_back、push_front、erase 等等,操作与我们以前学习过的都大相径庭,所以我只贴出代码,有更多需要可以参考 Qt 帮助文档。下面只是 QList 的代码,其实你把里面 QList 的关键字替换成 QVector 就可以切换成数组形式了。这是 Qt 对为了让大家更方便的使用,所以让接口风格装都保持一致性,只不过在遍历时,vector使用at方法要比遍历链表速度快。

继续阅读

上几篇文章我们使用 QMainWindow 添加了菜单栏、工具栏、状态栏等控件,他们分别在窗口中起到不同的作用。但千万别忽略了中间位置,因为中间位置是我们用来添加其他控件的位置,如果你直接在对象中new了某些其他控件(比如一个button),那么这个控件会覆盖菜单栏导致不能正常显示。这就需要我们来创建一个中心部件,以保证各个控件之间不会冲突。

继续阅读