Qt信号和槽的一些补充

在Qt工程中,一个类若要支持信号和槽,就必须从 QObject 或 QObject 的子类继承,同时需要在头文件类声明的开头引入 Q_OBJECT 宏。

信号和槽的连接使用connect:

connect(const QObject *sender,
        PointerToMemberFunction signal,
        const QObject *receiver,
        PointerToMemberFunction method,
        Qt::ConnectionType type=Qt::AutoConnection);

connect(const QObject *sender,
        PointerToMemberFunction signal,
        Functor functor);
        /* Lambda expression can also be used. */

Example:

QLabel *label = new QLabel;
QLineEdit *lineEdit = new QLineEdit;
QObject::connect(lineEdit, &QLineEdit::textChanged,
                        label, QLabel::setText);

若在发送者类中信号存在重载,连接信号需要使用 QOverload< >::of( )或 static_cast<>()来指定类型。例如在 QComboBox 中关于currentIndexChanged有两个信号:

void QComboBox::currentIndexChanged(const QString &text)
void QComboBox::currentIndexChanged(int index)
connect(comboBox,
        QOverload<const QString &>::of( &QComboBox::currentIndexChanged),
        [=](const QString &text){ /* ... */ });

connect(comboBox,
        static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
        [=](int index){/* ... */});

题图来自Pixabay.


已发布

分类

来自

标签: