crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Идеологически верный выбор инструментов.
Obey-Kun
  опции профиля:
сообщение 3.4.2010, 3:28
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

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




Репутация:   0  


Цитата
вообще соединять в дочернем объекте сигнал родителя - плохая идея, т.к., как минимум, при чтении кода, сначала читается код верхнего, по иерархии, объекта. И лишь при возникновении непонимания лезишь внутрь дочернего.
Поэтому такое соединение нужно делать в родительском объекте.

Вот-вот :). Теперь всегда буду так делать.

но с другой стороны, тогда слот придётся делать публичным... так точно обычно делают?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.4.2010, 3:46
Сообщение #12


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

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

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




Репутация:   94  


Цитата(Obey-Kun @ 3.4.2010, 7:28) *
тогда слот придётся делать публичным... так точно обычно делают?
ну слот - функция, просто в отличие от функции-члена класса с ним можно связать сигнал.
А часть функций реализуют публичное API класса.
Например:
QLabel::setText() - открытый слот
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 3.4.2010, 3:56
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

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




Репутация:   0  


Цитата
ну слот - функция, просто в отличие от функции-члена класса с ним можно связать сигнал.

Да я знаю. Просто по-хорошему в моём случае слот можно сделать приватным и коннектить к нему сигнал пэрента в конструкторе. Это ради нормальной инкапсуляции и всё такое.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.4.2010, 4:03
Сообщение #14


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

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

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




Репутация:   94  


при таком подходе тебе нужно будет сделать видимым объявление перечисления внутри класса дочернего объекта.
Инкапсуляция похоронена заживо. А самое главное - похоронена концепция компонентного подхода (предоставляемая сигналами и слотами), т.к. компонент стал жёстко зависеть от конкретного includ'а

можно конечно отказатся от объявления в сигнале и слоте перечисления и использовать int, но тогда контроль области определения функции (диаппазона изменения int'а) будешь делать своими глазами
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Obey-Kun
  опции профиля:
сообщение 3.4.2010, 4:11
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 96
Регистрация: 24.3.2010
Пользователь №: 1556

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




Репутация:   0  


Цитата
при таком подходе тебе нужно будет сделать видимым объявление перечисления внутри класса дочернего объекта.

Так ведь в любом случае надо делать объявление перечисления видимым как минимум в MainWindow (он испускает сигнал) и во Вью (там слот).

У меня enum объявлен в файле с константнами, типа того:
Раскрывающийся текст

#pragma once
#ifndef QFGUI_QFROST_H
#define QFGUI_QFROST_H

namespace qfgui
{

struct QFrost {
    public:
    /**
     * Расстояние в единицах сцены между узлами сетки,
     * ставится в соответствие одной единице чертежа (безотносительно реальных
     * единиц измерения).
     * @warning не следует путать сетку с видимой сеткой!
     */
    static const unsigned int unitsInGridStep = 10;

    /// Сколько метров в одной единице чертежа
    static const double metersInUnit;

    /// Перечисление типов инструментов
    enum ToolType {
        /// Создавалка ячеек
        cell_creator,
        /// Создавал граничных условий
        boundary_creator,
        /// Прямоугольное выделение
        rectangle_selection,
        /// Эллиптическое выделение
        ellipse_selection
    };
};

}

#endif // QFGUI_QFROST_H



Ну а файл с константами подключается там, где надо. Так что не страшно.

Кстати, всё почему-то заработало без ковыряния с Q_ENUMS.

Сообщение отредактировал Obey-Kun - 3.4.2010, 4:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 23.11.2024, 15:28