Прежде всего, вам необходимо понять основную теорию о Слотах и Сигнале , которые являются особенностями QT.Они позволяют любому объекту, присущему QOBJECT
, отправлять между ними сообщение, как события.
- Класс, который испускает событие, должен реализовывать
signal
.
//Definition into the Class A (who emits)
signals:
void valueChanged(int newValue);
Класс, который получит событие (
сигнал ), должен реализовать открытый
slot
, который должен иметь тот же аргумент, что и
signal
.
//Definition into the Class B (who receives)
public slots:
void setValue(int newValue);
Класс, который получит событие (
сигнал ), должен подключить
Сигнал против
Слот .Используйте метод
connect
, чтобы связать сигнал
из экземпляра класса A и слота из экземпляра класса B.
//There is an instance of class A called aEmit.
void B::linkSignals()
{
connect(&aEmit, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
}
Для запуска сигнала используйте ключевое слово
emit
с сигналом в качестве функции и его аргументами:.
//from Class A
void A::triggerSignal()
{
int myValue{23};
emit valueChanged(myValue);
}
В классе B, метод, который был объявлен как slot, должен быть вызван.
//from Class A
void B::setValue(int newValue);
{
cout << newValue << endl;
}
Здесь вы можете увидеть больше о Сигналах и Слотах.
https://doc.qt.io/qt-5/signalsandslots.html