crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V  < 1 2 3 4 5 >  
Ответить в данную темуНачать новую тему
> Связка слота и сигнала разных объектов
AD
  опции профиля:
сообщение 15.1.2009, 16:44
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(spirit @ 15.1.2009, 16:40) *
я понял. "карта" обрабатывает клик в контекстном меню или "главное окно"?

Клик обратывается в контекстном меню! Т.е. как я понял, создать в главном потоке сигнал, который соединить с сигналом, обрабатывающимся в карте?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 16:52
Сообщение #22


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 13.1.2009
Из: Ukraine, Krivoy Rog
Пользователь №: 486

Спасибо сказали: 1 раз(а)




Репутация:   1  


вы меня не поняли.

Цитата
Клик обратывается в контекстном меню!


вы где обрабатывает клик? сконнектили вы необходимую акцию из контекстного меню для дальнейшей обработки?

думаю да, вот я испрасл, где эта обработка делается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 15.1.2009, 16:53
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(AD @ 15.1.2009, 16:44) *
сигнал...соединить с сигналом


Да, emit одного сигнала повлечет цепную реакцию и будет пущен второй сигнал. Если при этом есть коннекты на оба сигнала, то будет вызвано 2 слота.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.1.2009, 16:54
Сообщение #24


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 15.1.2009, 16:44) *
Тогда сигнал будет еще и ретранслироватся (предаваться дальше).

что то я ответить не успел:(
согласен так и стоит делать....это кстати одна из причин существования сигналов ислотов ретранслировать событие по иерархии вверх....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 17:21
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Блин, ну не попадает он в этот слот. Как поправить, прям не знаю.

Вот код:
class QTrackWidget: public QWidget
{
    Q_OBJECT

private:
    QAction* measureAction;            ///< опция для измерения расстояний

private slots:
    void check(bool f);

signals:
    void checked_measure(bool is_press);
};

/// Слот нажатия на опцию измерения расстояния
void QTrackWidget::check(bool f)
{
    if(f) setCursor(Qt::CrossCursor);
    else
    {
        measure_flag = false;
        calc_distance -> clear();
    }
    emit checked_measure(f);
}

/// Инициализация опции для измерения расстояний
void QTrackWidget::initActionMeasurement()
{
    //что-то )
    connect(measureAction, SIGNAL(toggled(bool)), this, SLOT(check(bool)));
    connect(measureAction, SIGNAL(toggled(bool)), this, SLOT(check(bool)));
}

/// Класс главного окна [желательно многие функции вынести из него]
class TLV: public QMainWindow, public TLVClass
{
    Q_OBJECT

signals:
    void checked_dist_measure(bool is_press);

private slots:
    void measureDistance(bool is_measure);
};

/// Слот отображающий в поле вывода координат измеряемое расстояние
void TLV::measureDistance(bool is_measure)
{
    emit checked_dist_measure(is_measure);
    if(is_measure) editCoords -> setText("Distance measurement");
    update();
}

TLV::TLV(QWidget *parent, Qt::WFlags flags)
{
connect(trackView, SIGNAL(checked_dist_measure(bool)), this, SLOT(measureDistance(bool)));
    connect(trackView, SIGNAL(checked_dist_measure(bool)), this, SIGNAL(checked_measure(bool)));
}


Где я мог ошибиться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 17:37
Сообщение #26


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AD @ 15.1.2009, 20:21) *
в этот слот
какой?

Цитата(AD @ 15.1.2009, 20:21) *
this, SIGNAL(checked_measure(bool)));
тут?

AD, добавление консоли к Qt приложению сильно помагает, MOC будет тебе сообщать о казусах
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 17:42
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.1.2009, 17:37) *
какой?

тут?

AD, добавление консоли к Qt приложению сильно помагает, MOC будет тебе сообщать о казусах

Не попадает в слот void measureDistance(bool is_measure)
Что я должен написать, чтобы увидеть казусы moc? Их можно через дебаггер увидеть а не консоль? Если нельзя, воспользуюсь консолью, но что надо туда выводить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 17:45
Сообщение #28


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(AD @ 15.1.2009, 20:42) *
но что надо туда выводить?
ничего, главное сборка в режиме отладки и наличие консоли.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.1.2009, 17:53
Сообщение #29


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 15.1.2009, 17:45) *
Цитата(AD @ 15.1.2009, 20:42) *
но что надо туда выводить?
ничего, главное сборка в режиме отладки и наличие консоли.



можно к проекту добавить консоль при первом qmake CONFIG+=console
либо прямо в файле *.pro
как ты раньше без неё жил???

кстати можешь в лог выводить при помощи Qt или std::cout у точно узнаешь попадаешь в слот или нет.

Сообщение отредактировал kwisp - 15.1.2009, 17:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 17:56
Сообщение #30


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


AD, ты всех запутал своими примерами. Если у тебя есть какие-то отношения, в данном случае сигнально-слотовые.
то ты должен выкидывать из кода, для примеров, только нисущественные моменты, а все существенные оставить. Т.е. участников отношений.
/// Класс виджета карты с траектории
class QTrackWidget: public QWidget
{
    Q_OBJECT

private:
    bool measure_flag;                ///< флаг, сигнализирующий о моменте измерения

private:
       void initActionMeasurement();

private slots:
    void check(bool f);

// anything
};

/// Слот нажатия на опцию измерения расстояния
void QTrackWidget::check(bool f)
{
    if(f) setCursor(Qt::CrossCursor);
    else
    {
        measure_flag = false;
        calc_distance -> clear();
    }
}

/// Инициализация опции для измерения расстояний
void QTrackWidget::initActionMeasurement()
{
    // anything
    connect(measureAction, SIGNAL(toggled(bool)), this, SLOT(check(bool)));
}

здесь есть слот QTrackWidget::check(bool f); Есть соединение с этим слотом connect(measureAction, SIGNAL(toggled(bool)), this, SLOT(check(bool)));
некого нечто measureAction, кто такой откуда? (где объявлен, где создан экзепляр, приведи код)
Зато есть мусор:
    if(f) setCursor(Qt::CrossCursor);
    else
    {
        measure_flag = false;
        calc_distance -> clear();
    }
который неважен.

Непонятно как используется класс QTrackWidget, где создается его экземпляр.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

5 страниц V  < 1 2 3 4 5 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.12.2022, 9:43