Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
2 / 3 / 0
Регистрация: 13.01.2015
Сообщений: 54
1

Передача сигнала между классами

03.02.2015, 02:28. Просмотров 2638. Ответов 8
Метки нет (Все метки)

Как передать сигнал из одного класса в другой. Например:
C++
1
2
3
4
5
void classA::set()
{
QLineEdit *lineedit = new QLineEdit;
/*передать значение lineedit из класса classA*/
}
C++
1
2
3
4
5
void classB::get()
{
/* сюда*/
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2015, 02:28
Ответы с готовыми решениями:

Отправка сигнала между классами
Всем привет. Новичок в QT, никак не разберусь с отправкой сигнала. В MainWindow есть тул бар,...

Передача переменных между классами.
Имеется класс QtPkkNetConf и в нем созданы еще 3 класса привязанные к табам соответственно. ...

Передача данных между классами
Мне надо передать несколько массивов между двумя классами. Пробовал делать это через сигналы и...

Передача массива между классами
Здравствуйте! Вопрос простой, но туплю уже несколько часов. Есть класс MainWindow, в этом классе...

8
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
03.02.2015, 05:40 2
Лучший ответ Сообщение было отмечено fahrenheit как решение

Решение

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
class  A : public QObject
{
    Q_OBJECT
signals:
    void getText(const QString &text);
public:
    A() {}
    virtual ~A() {}
private:
    void set(){
        QLineEdit *edit = new QLineEdit;
        emit getText(edit->text());
    }
};
class B : public QObject
{
    Q_OBJECT
public:
    B() {}
    virtual ~B() {}
    
public slots:
    void set(const QString &text){
        _text = text;
    }
private:
    QString _text;
};
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    A *a = new A;
    B *b = new B;
    QObject::connect(a,SIGNAL(getText(QString)),
                     b,SLOT(set(QString)));
    return a.exec();
}
так как-то....
0
Avazart
03.02.2015, 14:12
  #3

Не по теме:

Цитата Сообщение от Pingvinoff Посмотреть сообщение
так как-то....
с утечками памяти...

0
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
04.02.2015, 05:36 4
Avazart, задача стояла показать механизм сигналов и слотов. А можно пример где нет утечки?
0
Автор FAQ
2724 / 1420 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
04.02.2015, 09:07 5
Pingvinoff, у Вас в методе set класса А, QLineEdit создается но не удаляется. Так же в функции main объекты классов А и В не удаляются...
1
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
05.02.2015, 12:05 6
Чистый, хорошо, только один вопросик:
почему нигде, ну почти: ни в официальной документации и примерах, ни у того же Саммерфилда, ручками ничего не удаляется?
За исключением объектов отдельных классов (например QAudioRecorder)? Или я чего-то не понимаю? Деструкторов по умолчанию для классов унаследованных от QWidget недостаточно?
0
Эксперт С++
8209 / 5969 / 591
Регистрация: 10.12.2010
Сообщений: 27,633
Записей в блоге: 24
05.02.2015, 12:12 7
Цитата Сообщение от Pingvinoff Посмотреть сообщение
ручками ничего не удаляется?
Так посмотри их код и сравни со своим.
C++ (Qt)
1
2
3
4
5
void set()
{
        QLineEdit *edit = new QLineEdit(this); //  this !!!
        emit getText(edit->text());
}
Добавлено через 2 минуты
Да и еще префиксное подчеркивание как выделение членов класса не гуд.
0
57 / 44 / 11
Регистрация: 16.09.2014
Сообщений: 124
05.02.2015, 12:14 8
Наверное потому, что объекты создаются с указанием его родителя, типа того: Bla *b = new Bla(this), а в QT родитель (QObject) при удалении, удаляет своих потомков, но если родитель не указан и вы не удалили объект сами то здравствуй утечка. Так что ребята все правильно написали, в вашем примере есть утечки.

Цитата Сообщение от Pingvinoff Посмотреть сообщение
Деструкторов по умолчанию для классов унаследованных от QWidget недостаточно?
В С++ достаточно иметь только дефолтные деструкторы, что-бы не было утечек? Люди, очнитесь QT это те же С++.
0
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
05.02.2015, 13:13 9
Цитата Сообщение от Avazart Посмотреть сообщение
QLineEdit *edit = new QLineEdit(this);
Avazart, очепятка
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2015, 13:13

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

Передача данных между классами/окнами
Всем доброе время суток! Уже неделю бьюсь над одной проблемой: не могу оформить грамотную...

Взаимодействие между классами
Начал изучать Qt и попутно осваивать ООП. Пока проблем больше со вторым... В учебных целях пишу...

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

Connect между классами
Добрый день всем! Есть задача вызывать слот класса Figure из класса Track. Не понимаю как написать...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.