crossplatform.ru

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

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


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

Группа: Участник
Сообщений: 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
Сообщение #32


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

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

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




Репутация:   23  


что в студии компилятор не запускается уже из командной строки?
qmake -project CONFIG+=console
qmake
nmake - ну или как он там??? и всё любуйся на конссоль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 18:13
Сообщение #33


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

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

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




Репутация:   94  


Цитата(AD @ 15.1.2009, 21:03) *
Этот класс создается сразу при открытии программы.
приведи в пример код.

Цитата(AD @ 15.1.2009, 21:03) *
Тот слот, который ты считаешь не нужным,
читаешь не внимательно:
Цитата(Litkevich Yuriy @ 15.1.2009, 20:56) *
Зато есть мусор:
    if(f) setCursor(Qt::CrossCursor);
    else
    {
        measure_flag = false;
        calc_distance -> clear();
    }


который неважен.
это тело слота
Цитата(AD @ 15.1.2009, 21:03) *
для показа где используется сигнал checked_measure
нет такого места вэтом слоте
Цитата(AD @ 15.1.2009, 21:03) *
для вызова сигнала checked_dist_measure,
тоже нет кода.

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


Студент
*

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

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




Репутация:   1  


или компилябельный пример прикрепи :)

ЗЫ. в студии есть окно "Output" туда выводится вся дебажная инфа, конечно если приложение собирается в дебажном режиме.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 18:18
Сообщение #35


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

Группа: Участник
Сообщений: 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)
{
    ...// anything
    emit checked_measure(f);
}

class Ui_TLVClass
{
public:
    QTrackWidget *trackView;

public:
    void setupUi(QMainWindow *TLVClass);                // setupUi
    void retranslateUi(QMainWindow *TLVClass);            // retranslateUi
};

namespace Ui {
    class TLVClass: public Ui_TLVClass {};
} // namespace Ui

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

signals:
    void checked_dist_measure(bool is_press);

private slots:
    void pressMenu();
    void openRecentFiles();
    void invisibleProgress();
    void pressInnerMenu();
    void measureDistance(bool is_measure);

};

TLV::TLV
{
connect(trackView, SIGNAL(checked_measure(bool)), this,      SIGNAL(checked_dist_measure(bool)));
    connect(trackView, SIGNAL(checked_dist_measure(bool)), this, SLOT(measureDistance(bool)));
}


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


Сообщение отредактировал AD - 15.1.2009, 18:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 18:28
Сообщение #36


Студент
*

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

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




Репутация:   1  


судя по коду этого сигнала checked_dist_measure нет в QTrackWidget вот поэтому слот TLV::measureDistance не вызывается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 15.1.2009, 18:28
Сообщение #37


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

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

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




Репутация:   23  


TLV::TLV
{
connect(trackView, SIGNAL(checked_measure(bool)), this,      SIGNAL(checked_dist_measure(bool)));
    connect(trackView, SIGNAL(checked_dist_measure(bool)), this, SLOT(measureDistance(bool)));
}


почему так?
один и тот же сигнал один и тотже объект обработчик один и тот же набор параметров.
почему бы не включить вызов сигнала checked_dist_measure(bool) в слот measureDistance(bool) и соединений на одно станет меньше.:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.1.2009, 18:29
Сообщение #38


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

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

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




Репутация:   17  


Цитата(spirit @ 15.1.2009, 18:28) *
судя по коду этого сигнала checked_dist_measure нет в QTrackWidget вот поэтому слот TLV::measureDistance не вызывается.

Вот это откровение для меня, если честно. Если он там нужен, где его там употребить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.1.2009, 18:30
Сообщение #39


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

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

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




Репутация:   94  


AD, отредактируй свой пост, чтобы показать в классе TLV объявления всех его слотов и сигналов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 15.1.2009, 18:38
Сообщение #40


Студент
*

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

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




Репутация:   1  


Цитата(AD @ 15.1.2009, 17:29) *
Цитата(spirit @ 15.1.2009, 18:28) *
судя по коду этого сигнала checked_dist_measure нет в QTrackWidget вот поэтому слот TLV::measureDistance не вызывается.

Вот это откровение для меня, если честно. Если он там нужен, где его там употребить?


имхо, вот все что нужно


TLV::TLV(...)
{
connect(trackView, SIGNAL(checked_measure(bool)), this,      SIGNAL(measureDistance(bool)));
}


а если надо слать сигнал из TLV еще куда-то, то либо в слоте measureDistance делать emit вот так

class TLV ...

{

Q_OBJECT

public:

    TLV(...);

signals:

  void measureChanged(bool changed);

};

void TLV::measure(bool changed)

{

  ....

emit measureChanged(changed);

.....

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 2.2.2023, 16:38