Russian Qt Forum

Программирование => С/C++ => Тема начата: jury от Октябрь 11, 2016, 14:17



Название: Как из своей функции вызвать функцию определенную в классе?
Отправлено: jury от Октябрь 11, 2016, 14:17
Как из своей функции вызвать функцию определенную в классе?

#include "exx.h"
#include "ui_exx.h"

#include "my_exx.h"     // Мои прототипы функций

Exx::Exx(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Exx)
{
    ui->setupUi(this);
}

Exx::~Exx()
{
    delete ui;
}

// Обработчик сообщения SIGUSR1
void My_Hndlr_Msg(int signo, siginfo_t *si, void *ucontext)
{
    if(signo == SIGUSR1)  My_Obrab(); // Функция обработки
}

// Функция: - My_Obrab(void)
void Exx::My_Obrab(void)
{
    ui->My_pushBtn->setStyleSheet(QString("background-color: red"));
}


ошибка: 'My_Obrab' was not declared in this scope
     if(signo == SIGUSR1)  My_Obrab(); // Функция обработки
                                    ^


Название: Re: Как из своей функции вызвать функцию определенную в классе?
Отправлено: __Heaven__ от Октябрь 11, 2016, 15:42
Пожалуйста, пользуйтесь тэгами оформления кода.

My_Obrab у вас является методом класса, который без наличия экземпляра класса вызываться не может.


Название: Re: Как из своей функции вызвать функцию определенную в классе?
Отправлено: jury от Октябрь 11, 2016, 16:50
Извините за неправильно оформленный код, никогда не пользовался тегами.
В C++Builder Windows аналогичный вызов функции имел вид:
 имя_объекта_формы->My_Obrab();
Как в Qt это сделать?


Название: Re: Как из своей функции вызвать функцию определенную в классе?
Отправлено: ssoft от Октябрь 11, 2016, 17:17
В C++Builder Windows аналогичный вызов функции имел вид:
 имя_объекта_формы->My_Obrab();
Как в Qt это сделать?

Точно так же. Определите переменную <имя_объекта_формы>. Где она инициализирована?


Название: Re: Как из своей функции вызвать функцию определенную в классе?
Отправлено: lit-uriy от Октябрь 14, 2016, 13:55
Дело в том, что в Билдере по дурацки (с точки сзрения ООП и С++) было сделано, объект у них создавался автоматом в заголовочнике, отсюда у людей непонимание как использовать С++.

Топикстартеру:
нужно создать объект там, где он нужен и затем его использовать.

Откройте любой пример Qt и посмотрите как используются самописанные классы.
Очень рекомендую старое (выпиленное в новых версиях) учебное пособие: http://www.doc.crossplatform.ru/qt/4.4.3/tutorials-tutorial.html