Qt4
connect(btn, SIGNAL(clicked()), this, SLOT(close()));
在 Qt 4 中,信号和槽的连接使用了一种不同的语法,这是 Qt 框架特有的,利用了 Qt 的元对象系统(Meta-Object System)。Qt 4 中连接信号和槽的语法使用了特殊的宏:
SIGNAL()
和SLOT()
。这些宏用于在运行时进行信号和槽的匹配,而不是在编译时。这种方法相比于 Qt 5 引入的语法,类型安全性较低,且更容易出现因拼写错误而导致的运行时错误。Qt 4 信号和槽连接示例
假设你有一个 QPushButton 对象指针
btn
和一个 QWidget 的子类实例this
,你想要在按钮被点击时关闭窗口。在 Qt 4 中,你会这样写:在这个例子中:
connect
是用于连接信号和槽的函数。btn
是信号源,即 QPushButton 对象。SIGNAL(clicked())
是一个宏,用于指定clicked
信号。注意信号名被放在字符串中,这意味着编译器不会检查信号的存在性或正确性。this
是槽函数所属的对象,即当前类的实例。SLOT(close())
是一个宏,用于指定close
槽。和SIGNAL
宏一样,槽函数名也是作为字符串提供的。这种语法虽然在 Qt 4 中非常常见,但因为它依赖于运行时的字符串解析,所以可能会引入一些性能开销和潜在的错误。Qt 5 的新语法使用了函数指针,提供了更好的类型安全性和编译时检查,这些都是 Qt 4 的旧语法所缺乏的。
Qt5
connect(btn,&QPushButton::clicked,this,&QWidget::close);
Qt 框架中用于连接信号和槽的一个示例。这里,使用了 Qt 5 引入的新语法,它利用了 C++11 的特性来提供一种类型安全且易于阅读的方式来连接信号和槽。
- connect:这是 Qt 中用于连接信号和槽的函数。
- btn:这是一个指向 QPushButton 对象的指针。它是发出信号的对象。
- &QPushButton::clicked:
QPushButton
是一个 Qt 提供的类,代表一个按钮。clicked
是 QPushButton 类的一个信号。这个信号在按钮被点击时发出。&QPushButton::clicked
是获取这个信号的方式。在 Qt 的新语法中,使用&类名::信号名
来引用一个信号。- this:这通常指向当前的类实例。在这个上下文中,
this
指的是包含当前代码的对象。- &QWidget::close:
QWidget
是 Qt 中所有窗口类的基类。close
是 QWidget 类的一个槽函数。这个函数用于关闭窗口。&QWidget::close
是获取这个槽函数的方式。在 Qt 的新语法中,使用&类名::槽函数名
来引用一个槽。因此,
connect(btn, &QPushButton::clicked, this, &QWidget::close);
这行代码的意思是:当btn
(按钮)被点击时,调用this
(当前对象)的close
方法。这通常用于创建一个按钮,当用户点击这个按钮时,会关闭当前的窗口。