Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 28.11.2018
Сообщений: 51
1

Connect, сигналы слоты восстановление связи

07.03.2021, 12:21. Показов 2130. Ответов 6

Author24 — интернет-сервис помощи студентам
Добрый день, вопрос по слотам\сигналам.
Есть небольшой пример программы, в которой создается 3 окна, кнопка Connect\DisConnect, она прерывает связь между, виджетом добавления и виджетом отображения. Ну и вопрос в том, что связь при нажатии на DisCon прекращается, и как реализовать это я понял, а как восстановить данную связь?

Main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include "counter.h"
int main(int argc, char *argv[])
{
    bool Check = true;
    QApplication a(argc, argv);
    QLabel lbl("0");
    lbl.setMinimumSize(200,100);
    QPushButton cmd("ADD");
    cmd.setMinimumSize(200,100);
    QPushButton cmd2("DISCONNECT/CONNECT");
    cmd2.setMinimumSize(200,100);
    Counter counter;
    lbl.show();
    cmd.show();
    cmd2.show();
 
    QObject::connect(&cmd, SIGNAL(clicked()),&counter, SLOT(slotInc()) ); //Add
 
    if(Check == true)
    {
        Check = false;
        QObject::connect(&cmd2, SIGNAL(clicked()),&counter, SLOT(disconnector()) );//Con DisCon
 
    }
    else
    {
        Check = true;
        QObject::connect(&cmd2, SIGNAL(clicked()),&counter, SLOT(connector()) );//Con DisCon
 
    }
 
    QObject::connect(&counter, SIGNAL(counterChanged(int)), &lbl, SLOT(setNum(int)) ); //Add
 
    QObject::connect(&counter, SIGNAL(goodbye()), &a, SLOT(quit()) );
    return a.exec();
}
counter.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef counter_h
#define counter_h
#include <QObject>
class Counter : public QObject
{
    Q_OBJECT
private:
    int Value;
public:
    Counter(QObject *parent=0);
public slots:
    void slotInc();
    void disconnector();
    void connector();
signals:
    void goodbye ();
    void counterChanged(int);
};
#endif // COUNTER_H
counter.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "counter.h"
Counter::Counter (QObject *parent) : QObject(parent), Value(0) { }
 
void Counter::slotInc()
{
    emit counterChanged(++Value);
    if (Value == 15) { emit goodbye(); }
}
 
void Counter::disconnector()
{
    this->disconnect();
 }
 
void Counter::connector()
{
    this->connect(); //Ошибка
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2021, 12:21
Ответы с готовыми решениями:

Можно ли сделать, чтоб студия студия искала слоты и сигналы при написании SIGNAL или SLOT в connect?
В QtCreator-е есть несколько удобных фишек, упрощающих работу. Например, QtCreator ищет доступные...

Сигналы и слоты
Здравствуйте! Не могу разобраться в сигналах и слотах. Сначала приведу код: main.cpp ...

Сигналы и Слоты
Можно ли использовать лямбдо-функцию для SLOT, вместо написания нового slots?

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

6
20 / 16 / 5
Регистрация: 07.01.2019
Сообщений: 90
07.03.2021, 17:02 2
Все просто. Нужно снова сделать connect сигнала к слоту.
0
1 / 1 / 0
Регистрация: 28.11.2018
Сообщений: 51
07.03.2021, 21:19  [ТС] 3
Ну я так и прописываю.
А как именно по синтаксису это происходит, тк то , что у меня, оно не срабатывает.
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
08.03.2021, 14:48 4
Memorandym, ты скажи, чего ты вцелом добиться хочешь.
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
08.03.2021, 15:10 5
Лучший ответ Сообщение было отмечено Memorandym как решение

Решение

А, понял. При нажатии на DISCONNECT\CONNECT рвется\восстанавливается связь каунтера с отображением.
Я б сделал с флагом и не стал трогать сигналы\слоты

counter.h
C++ (Qt)
1
2
3
private:
    int Value;
    bool state;     // <------ flag
counter.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
void Counter::slotInc() {
    if (state) {
        emit counterChanged(++Value);
        if (Value == 15) { emit goodbye(); }
    }
}
 
void Counter::disconnector() {
    state = !state;
}
И усё
Connect, сигналы слоты восстановление связи
1
фрилансер
5498 / 5094 / 1047
Регистрация: 11.10.2019
Сообщений: 13,341
08.03.2021, 15:52 6
в зависимости от задачи - ещё может пригодится вот это:

1) QObject::blockSignals
2) QSignalBlocker
0
1 / 1 / 0
Регистрация: 28.11.2018
Сообщений: 51
08.03.2021, 19:01  [ТС] 7
Да, мы примерно сошлись в решении)
0
08.03.2021, 19:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2021, 19:01
Помогаю со студенческими работами здесь

Сигналы и слоты
Столкнулся с типичной для многих новичков в Qt проблемой, связанное с сигналами и слотами. Есть...

Сигналы и слоты
Пытаюсь законектить сигнал со слотом. Есть класс: server.h class server { public: ...

Сигналы\слоты
что можно сделать со сл. кодом ...

Сигналы и Слоты
Помогите разобраться. У меня есть некий объект ContextMenu из которого хочу послать сигнал в...

Слоты и сигналы Qt
Может мне кто-нибудь подскажет или я не замечаю чего-то очевидного. В общем перейду к описанию...

Слоты и сигналы в QT
пишу код используя статью собственно, код класса Downloader получился один в один такой же, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru