Qt-соединение члена интерфейса и двух сигналов в одном соединении - PullRequest
2 голосов
/ 02 октября 2019

Я хотел бы понять простой кусок кода, с которым я столкнулся. Это связь между объектом интерфейса и двумя сигналами.

Код:

 connect( ui->checkbox_legEnabled,
    SIGNAL( stateChanged( int ) ), SIGNAL( edited() ) );

Что означает эта строка кода?

СпасибоСара

Ответы [ 2 ]

2 голосов
/ 02 октября 2019

С помощью сигналов и слотов Qt вы можете напрямую подключить один сигнал к другому сигналу (или функции, отличной от signal), не имея слота между ними. Смотрите, здесь вызывается функция соединения эта перегрузка из QObject::connect.

Следовательно, эта строка кода означает, что когда объект ui->checkbox_legEnabled (предположительно, какой-то QCheckbox) испускает stateChanged сигнал (с переданным параметром int), непосредственно испускает другой сигнал (или обычную функцию-член) edited (без параметров).

0 голосов
/ 02 октября 2019

Краткий ответ: вы можете подключить сигнал к другому сигналу, и это означает, что второй сигнал также будет излучаться при каждом излучении первого сигнала. Подробнее о сигналах и слотах см. В документации здесь , также проверьтеновый способ вызова connect (с указателями на функции)

Теперь в вашем случае то, что он делает, в основном позволяет вам сохранять ui в секрете, но в то же время направлять сигналы, которые вы хотите, наружувашего объекта, позволяя другим объектам подключаться к сигналу (сигналам), который вы предоставляете в интерфейсе.

Пример неполного использования (на основе вашего кода я назвал класс, содержащий ваш код MyWidget):главное окно (или любое другое лицо), которое имеет доступ к вашему виджету, может получать уведомления о любых изменениях внутри, подключаясь к сигналу edited:

void MainWindow::createMyWidget()
{
    m_myWidget = new MyWidget(this);
    connect(m_myWidget, &MyWidget::edited, this, &MainWindow::myWidgetWasEdited));
}

Таким образом, когда что-то меняется внутри MyWidget,MainWindow может быть уведомлен о редактировании и может выполнять необходимые действия внутри слота myWidgetWasEdited.

TЕго можно расширить, если необходимо, для предоставления сигнала для каждого конкретного «редактирования» вместо одного общего edited сигнала (но это зависит от ваших потребностей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...