signal:信号
solts: 槽函数
类型
- 系统定义了信号和槽:直接重写相应的函数就行
鼠标
void mousePressEvent(QMouseEvent *event); // 单击 event->button()==Qt::LeftButton 左键,Qt::RightButton右键
void mouseReleaseEvent(QMouseEvent *event); // 释放
void mouseDoubleClickEvent(QMouseEvent *event); // 双击
void mouseMoveEvent(QMouseEvent *event); // 移动
void wheelEvent(QWheelEvent *event); // 滑轮
键盘
void Widget::keyPressEvent(QKeyEvent *event) // 按下 event->modifiers() 特殊键位,event->key() 普通键位
void Widget::keyReleaseEvent(QKeyEvent *event) // 释放
- 系统定义了信号:需要用户编写槽函数,并绑定信号
按钮 信号 clicked点击;pressed按下;releaed释放;双击通过定时器来实现
connect(sender, SIGNAL(signal), receiver, SLOT(slot)); // 建立连接
disconnect(sender, SIGNAL(signal), receiver, SLOT(slot)); // 取消连接
- 用户自己定义信号和槽:需要自己触发信号
signal:
signal(int); // 信号定义
emit signal(int i); // 发送信号
// 建立连接
static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,
const QObject *receiver, const QMetaMethod &method,
Qt::ConnectionType type = Qt::AutoConnection);
案例:
class AutomaticLabelTool : public QMainWindow
{
Q_OBJECT
public:
signals:
void LoginError(const QString& mess);
}
class ConnectCamera : public QWidget
{
Q_OBJECT
public:
ConnectCamera(QWidget *parent = Q_NULLPTR);
~ConnectCamera();
public slots:
void onErrorMess(const QString & _errorMess);
}
connect(this, &AutomaticLabelTool::LoginError, &m_connectCamera, &ConnectCamera::onErrorMess);