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


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

Группа: Сомодератор
Сообщений: 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, где создается его экземпляр.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 18:03
Сообщение #3


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

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

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 15.1.2009, 17:56) *
AD, ты всех запутал своими примерами. Если у тебя есть какие-то отношения, в данном случае сигнально-слотовые.
то ты должен выкидывать из кода, для примеров, только нисущественные моменты, а все существенные оставить. Т.е. участников отношений.
Непонятно как используется класс QTrackWidget, где создается его экземпляр.

Этот класс создается сразу при открытии программы. Ведь это карта. Тот слот, который ты считаешь не нужным, как раз и используется для показа где используется сигнал checked_measure для вызова сигнала checked_dist_measure, который и вызывает слот void measureDistance(bool is_measure).
Если бы знать, как в студии консоль прикрепить! :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.1.2009, 18:08
Сообщение #4


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

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

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




Репутация:   23  


что в студии компилятор не запускается уже из командной строки?
qmake -project CONFIG+=console
qmake
nmake - ну или как он там??? и всё любуйся на конссоль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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