Как излучать сигнал из поля со списком - PullRequest
0 голосов
/ 08 января 2020

У меня есть слот, в котором я создаю поле со списком и добавляю элементы, однако я хочу подавать сигнал менеджеру UI всякий раз, когда пользователь выбирает элемент. Мне интересно, есть ли способ использовать ключевое слово emit?

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

void Test::dropDown(){
    comboBox = new QComboBox(this);
    comboBox->addItem("Test 1");
    comboBox->addItem("Test 2");
    comboBox->addItem("Test 3");
    comboBox->showPopup();
    //connect(comboBox, QOverload<int>::of(&QComboBox::activated), )

    //I want to emit the activated item using the keyword "emit" and not connect
    emit

}

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Вы можете создать цепочку сигналов, соединяющую два сигнала вместо сигнала и слота, без причины испускать сигнал самостоятельно.

Дайте вашему классу Test такой сигнал :

signals:
    void comboBoxActivated(int index);

Когда вы создаете поле со списком:

comboBox = new QComboBox(this);    
connect(comboBox, QOverload<int>::of(&QComboBox::activated), this, &Test::comboBoxActivated);

Теперь дайте вашему классу UI manager слот для приема сигнала activated:

private slots:
    void testComboBoxActivated(int index);

Теперь, если у вас есть экземпляр Test в классе менеджера пользовательского интерфейса, например,

    Test * test = new Test();

подключит свой сигнал к слоту менеджера:

    connect(test, &Test::comboBoxActivated, this, &UIManager::testComboBoxActivated);

Таким образом, комбо будет в первую очередь подайте сигнал, который будет перенаправлен классом Test и, наконец, получен слотом менеджера пользовательского интерфейса.

0 голосов
/ 08 января 2020

Если я правильно понял, вам нужно emit сигнал при нажатии на элемент QComboBox; для этого вам нужно подключить активированный сигнал к излучателю, возможно, используя лямбда-функцию:

connect(comboBox, &QComboBox::activated, this, [this](int index)
{
    // Here emit your signal for the item at index `index`
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...