crossplatform.ru

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


  Ответ в Связка слота и сигнала разных объектов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 15.1.2009, 18:51
  Эврика, заработало! :)

Litkevich Yuriy, kwisp, spirit, спасибо огромное.

P.S. "спасибо" уже поставил, поэтому благодарю так! :)))
Litkevich Yuriy Дата 15.1.2009, 18:42
 
Цитата(kwisp @ 15.1.2009, 21:28) *
почему так?
вот после редактирования поста № 35 (! :o: ) стало видно ошибки:
у trackView нет сигнала checked_dist_measure

Цитата(AD @ 15.1.2009, 21:29) *
Вот это откровение для меня, если честно. Если он там нужен, где его там употребить?
нарисуй на бумажке квадратики (классы) и соедени их стралками (сигнал/слот) как они должны общатся, и сразу поймешь, где и что добавить.
spirit Дата 15.1.2009, 18:38
 
Цитата(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);

.....

}
Litkevich Yuriy Дата 15.1.2009, 18:30
  AD, отредактируй свой пост, чтобы показать в классе TLV объявления всех его слотов и сигналов
AD Дата 15.1.2009, 18:29
 
Цитата(spirit @ 15.1.2009, 18:28) *
судя по коду этого сигнала checked_dist_measure нет в QTrackWidget вот поэтому слот TLV::measureDistance не вызывается.

Вот это откровение для меня, если честно. Если он там нужен, где его там употребить?
kwisp Дата 15.1.2009, 18:28
 
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) и соединений на одно станет меньше.:)
spirit Дата 15.1.2009, 18:28
  судя по коду этого сигнала checked_dist_measure нет в QTrackWidget вот поэтому слот TLV::measureDistance не вызывается.
AD Дата 15.1.2009, 18:18
 
/// Класс виджета карты с траектории
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();
}
spirit Дата 15.1.2009, 18:18
  или компилябельный пример прикрепи :)

ЗЫ. в студии есть окно "Output" туда выводится вся дебажная инфа, конечно если приложение собирается в дебажном режиме.
Litkevich Yuriy Дата 15.1.2009, 18:13
 
Цитата(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,
тоже нет кода.

предлагаю тебе попорядку заново привести важные части исходников. Тогда будет и понятно и просто привести тебе пример что куда нужно дописать.
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.7.2025, 21:23