crossplatform.ru

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

> Связка слота и сигнала разных объектов
AD
  опции профиля:
сообщение 15.1.2009, 14:18
Сообщение #1


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

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

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




Репутация:   17  


Такая ситуация. Есть виджет отрисовки карты, который я переопределил (сделал наследника от QWidget). В нем есть слот, который определяется, когда я в контекстном меню нажимаю определенную галочку.
Каким образом мне определить слот в главном окне так, чтобы он реагировал на то же самое действие?


Чтобы не быть голословным, вот небольшой примерчик кода:
/// Класс виджета карты с траектории
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)));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 15:11
Сообщение #2


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

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

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




Репутация:   94  


AD, сигнал должен посылать тот класс в котором этот сигнал есть, т.е. checked_dist_measure(bool is_press) из QTrackWidget

Цитата(AD @ 15.1.2009, 17:18) *
Чтобы не быть голословным, вот небольшой примерчик кода:
кто такой measureAction в этом примере?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 15:30
Сообщение #3


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

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

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.1.2009, 15:11) *
кто такой measureAction в этом примере?

Опция (QAction), которая включает нужный мне флажок.
Цитата
а нельзя ли сделать вот так?
void TLV::measureDistance(bool is_measure){


    if(!is_measure) return;
  measureDistance(bool);  
    editCoords -> setText("Distance measurement");
}

А где ее вызывать?
Еще раз: я тот слот вызываю всегда, когда у меня идет переключение опции. Мне бы хотелось, чтобы при этом же переключении вызывалась функция из другого класса. Как это можно реализовать? :) Заранее благодарен за помощь....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 15:35
Сообщение #4


Студент
*

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

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




Репутация:   1  


тогда этот сигнал надо перенести в TLV и тогда сделать так

void TLV::measureDistance(bool is_measure){
    if(!is_measure) return;
    emit checked_dist_measure(is_measure);
    editCoords -> setText("Distance measurement");
}
....


connect(m_tvlWidget, SIGNAL(checked_dist_measure(bool)), this, SLOT(measureDistance(bool)));

....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 16:05
Сообщение #5


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

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

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




Репутация:   17  


м... а потом сделать указатель на главное окно программы в том виджете и вызвать указанный слот? Или я опять что-то путаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.1.2009, 16:09
Сообщение #6


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

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

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




Репутация:   23  


Цитата(AD @ 15.1.2009, 16:05) *
м... а потом сделать указатель на главное окно программы в том виджете и вызвать указанный слот? Или я опять что-то путаю?

вот видишь ты путаешь а я вообще не пойму.... напиши поподробнее что хочешь сделать. помогу чем могу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 16:31
Сообщение #7


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

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

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




Репутация:   17  


Есть галочка, которую я переключаю в контекстном меню в виджете карты. Необходимо, чтобы при переключении этой галочки, срабатывал слот в другом классе, классе главного окна, в котором содержится данный виджет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 16:34
Сообщение #8


Студент
*

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

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




Репутация:   1  


т.е. иерархия классов такая: главный виджет -> карта ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 16:35
Сообщение #9


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

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

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




Репутация:   17  


Цитата(spirit @ 15.1.2009, 16:34) *
т.е. иерархия классов такая: главный виджет -> карта ?

угу. Только они не связаны наследованием. А скорее это композиция.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 16:40
Сообщение #10


Студент
*

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

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




Репутация:   1  


я понял. "карта" обрабатывает клик в контекстном меню или "главное окно"?

если "карта", то создать сигнал в "карте" и связать его с "главным окном", а уже в "главном окне" создать слот


который будет дергать нужный слот "другого" класса.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Связка слота и сигнала разных объектов   15.1.2009, 14:18
- - spirit   можно создать сигнал в наследуемом виджете , а пот...   15.1.2009, 14:21
- - Litkevich Yuriy   Цитата(spirit @ 15.1.2009, 17:21) можно с...   15.1.2009, 14:29
|- - AD   Сделал вот так вот: class QTrackWidget: public...   15.1.2009, 14:52
|- - spirit   а Q_OBJECT где?   15.1.2009, 14:55
|- - AD   Цитата(spirit @ 15.1.2009, 14:55) а Q_OBJ...   15.1.2009, 14:58
|- - spirit   void TLV::measureDistance(bool is_meas...   15.1.2009, 15:02
|- - AD   Цитата(spirit @ 15.1.2009, 15:02) void TL...   15.1.2009, 15:04
|- - spirit   вот еть код void TLV::measureDistance...   15.1.2009, 15:09
- - Litkevich Yuriy   AD, сигнал должен посылать тот класс в котором это...   15.1.2009, 15:11
|- - AD   Цитата(Litkevich Yuriy @ 15.1.2009, 15:11...   15.1.2009, 15:30
|- - spirit   тогда этот сигнал надо перенести в TLV и тогда сде...   15.1.2009, 15:35
|- - AD   м... а потом сделать указатель на главное окно про...   15.1.2009, 16:05
|- - kwisp   Цитата(AD @ 15.1.2009, 16:05) м... а пото...   15.1.2009, 16:09
|- - AD   Есть галочка, которую я переключаю в контекстном м...   15.1.2009, 16:31
|- - spirit   т.е. иерархия классов такая: главный виджет -> ...   15.1.2009, 16:34
|- - AD   Цитата(spirit @ 15.1.2009, 16:34) т.е. ие...   15.1.2009, 16:35
|- - spirit   я понял. "карта" обрабатывает клик в кон...   15.1.2009, 16:40
||- - AD   Цитата(spirit @ 15.1.2009, 16:40) я понял...   15.1.2009, 16:44
||- - spirit   вы меня не поняли. ЦитатаКлик обратывается в конт...   15.1.2009, 16:52
|- - AD   Вот скрин: Задача у меня следующая. При нажатии н...   15.1.2009, 16:41
- - Litkevich Yuriy   Цитата(AD @ 15.1.2009, 17:18) Такая ситуа...   15.1.2009, 16:44
|- - kwisp   Цитата(Litkevich Yuriy @ 15.1.2009, 16:44...   15.1.2009, 16:54
|- - AD   Блин, ну не попадает он в этот слот. Как поправить...   15.1.2009, 17:21
- - SABROG   Цитата(AD @ 15.1.2009, 16:44) сигнал...со...   15.1.2009, 16:53
- - Litkevich Yuriy   Цитата(AD @ 15.1.2009, 20:21) в этот слот...   15.1.2009, 17:37
|- - AD   Цитата(Litkevich Yuriy @ 15.1.2009, 17:37...   15.1.2009, 17:42
- - Litkevich Yuriy   Цитата(AD @ 15.1.2009, 20:42) но что надо...   15.1.2009, 17:45
|- - kwisp   Цитата(Litkevich Yuriy @ 15.1.2009, 17:45...   15.1.2009, 17:53
- - Litkevich Yuriy   AD, ты всех запутал своими примерами. Если у тебя ...   15.1.2009, 17:56
|- - AD   Цитата(Litkevich Yuriy @ 15.1.2009, 17:56...   15.1.2009, 18:03
|- - kwisp   что в студии компилятор не запускается уже из кома...   15.1.2009, 18:08
- - Litkevich Yuriy   Цитата(AD @ 15.1.2009, 21:03) Этот класс ...   15.1.2009, 18:13
|- - AD   /// Класс виджета карты с траектории class QTrackW...   15.1.2009, 18:18
|- - spirit   судя по коду этого сигнала checked_dist_measure не...   15.1.2009, 18:28
||- - AD   Цитата(spirit @ 15.1.2009, 18:28) судя по...   15.1.2009, 18:29
||- - spirit   Цитата(AD @ 15.1.2009, 17:29) Цитата(spir...   15.1.2009, 18:38
|- - kwisp   TLV::TLV { connect(trackView, SIGNAL...   15.1.2009, 18:28
- - spirit   или компилябельный пример прикрепи ЗЫ. в студии ...   15.1.2009, 18:18
- - Litkevich Yuriy   AD, отредактируй свой пост, чтобы показать в класс...   15.1.2009, 18:30
- - Litkevich Yuriy   Цитата(kwisp @ 15.1.2009, 21:28) почему т...   15.1.2009, 18:42
- - AD   Эврика, заработало! Litkevich Yuriy, kwisp, ...   15.1.2009, 18:51


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 30.12.2024, 20:55