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, 16:44
Сообщение #2


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

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

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




Репутация:   94  


Цитата(AD @ 15.1.2009, 17:18) *
Такая ситуация. Есть виджет отрисовки карты, который я переопределил (сделал наследника от QWidget).
Этот виджет называется QTrackWidget? Если да, то идем дальше:

Цитата(AD @ 15.1.2009, 17:18) *
В нем есть слот, который определяется, когда я в контекстном меню нажимаю определенную галочку.
галочка, видимо, посылает сигнал. Который соединен в классе QTrackWidget с его же слотом? Если да, то идем дальше:

Цитата(AD @ 15.1.2009, 17:18) *
Каким образом мне определить слот в главном окне так, чтобы он реагировал на то же самое действие?
слот определяется как обычно.

Ключевой момент здесь это сигнал от галочки, нужно его сделать доступным из главного окна. Если галочка принадлежит виджету QTrackWidget, то делать галочку видимой для других классов плохой вариант. Я бы сделал так:

В классе QTrackWidget определил бы сигнал "щелкнули галочку", а в конструкторе QTrackWidget, где видимо создается галочка и соеденяется со слотом QTrackWidget'а, соеденил сигнал галочки с сигналом QTrackWidget::"щелкнули галочку". Тогда сигнал будет еще и ретранслироватся (предаваться дальше).
Затем в главном окне после создания экземпляра QTrackWidget, соеденил бы сигнал QTrackWidget::"щелкнули галочку" с подходящим слотом главного окна.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




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