Объект, который создает ваши два компонента, должен установить связь между вашим сигналом и вашим слотом.Но вы не должны раскрывать внутренние компоненты (т.е. создавать getter для возврата указателя на атрибут).
Способ решения последней проблемы с Qt - создать сигнал в вашем родительском элементе и позволить ему транслироватьзвонки.Например, если мне нужно подключить QCheckBox к QLineEdit в двух разных виджетах:
class Parent1: public QWidget
{
Q_OBJECT
public:
Parent1(): QWidget(), myCheckBox(new QCheckBox("Edit", this))
{
connect(myCheckBox, &QCheckBox::clicked, this, &Parent1::editForbidden);
}
private:
QCheckBox* myCheckBox;
signals:
void editForbidden(bool);
};
class Parent2: public QWidget
{
Q_OBJECT
public:
Parent2(): QWidget(), myLineEdit(new QLineEdit("Edit", this))
{
connect(this, &Parent2::forbidEdit, myLineEdit, &QLineEdit::setReadOnly);
}
private:
QLineEdit* myLineEdit;
signals:
void forbidEdit(bool);
};
// In the parent of Parent1 and Parent2 (or in the main if there is no parent)
QObject::connect(p1, &Parent1::editForbidden, p2, &Parent2::forbidEdit);
В этом примере, когда я нажимаю на флажок в parent1
, lineEdit в parent2
отключается,Но Parent1 ничего не знает о Parent2.