Russian Qt Forum
Апрель 19, 2024, 16:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 282 283 [284] 285 286 ... 290
4246  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 12:10
Складывать RGB. При переполнении обрезать (клиппить). Словом: RGB модель
Писать свои операторы.
4247  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 11:58
Слишком не однозначное значение у "суммы цветов". Складывать компоненты RGB или CMYK?  Что делать при переполнении?
Поэтому, IMHO, "сумму цветов" оставили на совести конечных пользователей, так сказать как они это представляют.
4248  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 26, 2013, 11:30
Все-таки прочли тему Улыбающийся  Конечно можно и так, минус что свои аналогичные плюсовые структуры есть (без них не проживешь), поэтому возникают многочисленные приведения.
Все приведения (если и будут) только в интерфейсном слое (Matrix).
4249  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 26, 2013, 11:28
Я понимаю о чем Вы говорите, но в данном случае мне просто нужны ++ эквиваленты примитивных структур (RGB_Float, C_Matrix, C_Rect) - и ничего более 

Код
C++ (Qt)
extern "C"
{
typedef struct matrix matrix_type;
void matrix_rotate_x( matrix_type *m, real a );
void matrix_scale( matrix_type *m, real s );
}
 
class Matrix
{
public:
   void rotate_x( real a );
   void scale( real s );
 
private:
   matrix_type m_matrix;
 
// а лучше
// class priv;
// priv    *d;
};
 
// ---
 
void Matrix::rotate_x( real a )
{
   matrix_rotate_x( &m_matrix, a );
}
 
void Matrix::scale( real s )
{
   matrix_scale( &m_matrix, s );
}
 

С одной стороны (пользовательский код) виден только интерфейс Matrix, с другой стороны все реализуется через С-функции.
4250  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 26, 2013, 09:58
Никто не мешает унаследоваться private. А вообще уверяю Вас что после первого, даже скромного, инженерного расчета Ваш энтузиазм к private и геттерам/сеттерам резко упадет, возможно до нуля  Улыбающийся
Что такое инженерный расчет и какое отношение он имеет к классам?
4251  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 26, 2013, 09:57
Из этого неясно как полностью избавиться от обращений к С-структурам.
Весь пользовательский код будет работать с объектами DrawBuffer_cpp, а про DrawBufferRec будет знать только прослойка.

- для каждой С структуры создаем С++ класс используя наследование или агрегацию (по вкусу)
Я несколько раз писал, что по моему мнению так делать нельзя. Как правило получается не удобная фигня.
Нужно сесть и представить (с точки зрения пользовательского кода), а как бы мне было удобно эффективно это все описать на C++.
Для примера, есть библиотека для работы с БД. Решение в лоб, это описать классы Поле, Запись, Таблица, Соединение и потом из Полей формировать Записи, из Записей Таблицы и т.д. А мне оказалось удобней оставить только две сущности: Запрос и Соединение. В которые, я и спрятал все обращения С-функциям. Весь пользовательский код знает только про эти два класса и пользуется только их интерфейсом. Бэкенд БД легко меняется, хочешь SQLite, MySQL, ...

Всегда забаляли такие классы. Зачем городить класс, если предоставляешь полный доступ к его внутренностям.  Непонимающий
Пример
Код
C++ (Qt)
class DrawBuffer_cpp : public DrawBufferRec {
...
RGB_Float_cpp * BufferBase( void )  { return (RGB_Float_cpp *) mBufferBase; }
Rect_cpp & BufferRect( void )   { return (Rect_cpp &) mBufferRect; }
Matrix_cpp & Matrix( void );     { return (Matrix_cpp &) mMatrix; }
}
4252  Qt / Общие вопросы / Re: Поэлементное считывание данных различных типов из двоичного файла : Январь 25, 2013, 22:25
xokc, спасибо за ответ, но не совсем понятно, как в QFile реализуется
Код:
ios_base::binary
применяемый в fstream?
А он по умолчанию открывается как бинарный, если не указывать при открытии QIODevice::Text
4253  Программирование / Python / Re: [PySide][Git] Кто хочет присоединиться к проекту? : Январь 25, 2013, 21:15
Кому Вы поручите задачу? (разумеется оплачиваемую, деньги Ваши). Понятно что первый выглядит куда привлекательнее. Однако автоматический выбор первого - часто не лучший, второй может оказаться  "то что надо". Ну может конечно и нет.
"часто не лучший" и "Ну может конечно и нет".  Улыбающийся Все от воли Божьей.

А так да, все может быть, но я сильно сомневаюсь в "часто не лучший", у меня противоположная статистика. Улыбающийся
4254  Программирование / Python / Re: [PySide][Git] Кто хочет присоединиться к проекту? : Январь 25, 2013, 19:56
Ну пошли шутки в стиле бурсы. Математика, физика, алгоритмы, теория, предметная часть - это, дескать, не для нас. А что тогда остается? А, ну связка "UI + БД", очередной "многопоточный сервер" (сколько их уже?) и.т.п. На мой так Вы оказываетесь в огромной толпе занимающихся тем же - и это бесперспективно. Изучать Qt. дуст, std, питон, objective - не вредно, но особо не надейтесь  Улыбающийся      
А чем же нужно заниматься? Улыбающийся

std  и boost это по сути С++, это нужно знать, если хочешь владеть своим инструментом (С++). Вряд ли, кто-то сейчас сможет сделать готовый проект используя только stdlib, а вот с бустом уже можно.
Qt удобная вещь для быстрого ваяния GUI. Как правило, если не делать "очередные многопоточные серверы" (в коих, я уверен, у вас огромный опыт Подмигивающий ), то остальные заказчики хотят тыкать мышкой в окошки.
Python удобный скриптовый язык. На нем не обязательно делать большие проекты, он очень сильно может помочь в автоматизации сборки и тестирования своих систем, генерации каких-то данных и т.д.

Мне кажется без этих знаний сейчас рассчитывать особо не на что...

P.S. А еще желательно знать и понимать forth - его я считаю самой красивой идеей/реализацией вообще в программировании за все времена. Еще не плохо знать ассемблер, какой нибудь, не обязательно на нем программировать, но эти знания будут очень полезны. И есть еще много чего, что хорошо бы знать и будет полезно... Улыбающийся
4255  Qt / Пользовательский интерфейс (GUI) / Re: QTextBrowser или QTextEdit - важный вопрос выбора... : Январь 25, 2013, 19:50
Разумеется я это знаю. И вопрос таков - если я использую QTextEdit только для вывода, будет ли это медленнее чем для QTextBrowser?
Будет одинаково.
4256  Qt / Пользовательский интерфейс (GUI) / Re: QTextBrowser или QTextEdit - важный вопрос выбора... : Январь 25, 2013, 19:21
Я создаю свой текстовый редактор для одной программы. Он перехватывает нажатия клавиш и сам вставляет в свою объектную модель нужные символы а потом "рендерит" текст - из объектной модели (массива слов) - строит HTML и вставляет через setHtml. Т.е. функции rich-редактора не используются в принципе. Но за основу я взял QTextEdit. Будет ли выгодно перейти на QTextBrowser - он будет быстрее работать? Лучше ли он оптимизирован для вывода текста с подсветкой и выделениями?
Ты посмотри от кого наследуется QTextBrowser... Подмигивающий
4257  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 25, 2013, 14:08
Как вариант, он будет хранить указатель на C-структуру DrawBuffer
Код
C++ (Qt)
DrawBuffer::DrawBuffer( DrawBufferPtr ptr ) :
   m_drawBuffer( ptr )
{
}
 
DrawBuffer::DrawBuffer( int w, int h ) :
   m_drawBuffer( new DrawBufferRec )
{
   m_drawBuffer->width = w;
   m_drawBuffer->height = h;
}
 

А можно разложить поля С-структуры в поля класса:
Код
C++ (Qt)
class DrawBuffer
{
   PixArray m_bufferBase;    // Предполагается, что конструктор PixArray умеет конструироваться из указателя на буфер RGB_Float
public:
   DrawBuffer( DrawBufferPtr ptr ) :
       m_bufferBase( ptr->mbufferBase )
   {
   }
}
 
4258  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 25, 2013, 11:10
Что посоветуете?

Нужно сесть и продумать, а как было бы удобно это использовать в клиентском коде.
Например, решаем использовать три сущности:
Код
C++ (Qt)
// Рендер - может генерировать DrawBuffer
class Renderer
{
public:
   DrawBuffer run( ... );    // В run используется C-API, возвращает же она уже C++ объект.
};
 
// Рисовальщик - умеет его выводить на всякие разности
class Drawer
{
public:
   void draw( const DrawBuffer &buf );
};
 
// Буфер - сам буфер
class DrawBuffer
{
public:
   DrawBuffer( int w, int h );
 
private:
   DrawBuffer( DrawBufferPtr );    // Прячем конструктор, который умеет создавать объект из C-структуры
   friend class Renderer;                  // Даем возможность методу Renderer::run использовать спрятанный конструктор для создания объектов из C-структуры
}
 

Для пользователя нет C-API, все спрятано в этих трех классах.
4259  Программирование / С/C++ / Re: C headers (mixed C/C++) : Январь 25, 2013, 10:08
Ну так показываем (схематично) как это должно выглядеть. Зачем нам костыль, давайте основательно. Только вот дальше слов и охаивания велосипедистов дело почему-то не идет  Улыбающийся
Так а что показывать? API С-библиотеки не доступно, обсуждаем одну структуру RGB_Float.

Для пользователя она должна быть скрыта за классом RGBReal и все доступные методы должны использовать ее:
Код
C++ (Qt)
void DrawBuffer( const std::vector<RGBReal> &buf, int width, int height );
 

Для хранения буферов можно сделать свой контейнер:
Код
C++ (Qt)
class PixBuffer
{
public:
   RGBReal &at( int x, int y );
   const RGBReal &at( int x, int y ) const;
}
 
void DrawBuffer( const PixBuffer &buf, int width, int height );
 

Здесь нужно садиться и смотреть какие сущности нужны для пользовательского кода и как сделать их удобное взаимодействие, и за этими классами прятать весь C API. И не в коем случае не наоборот!
4260  Qt / Model-View (MV) / Re: QSortFilterProxyModel + QStandardItemModel + QTreeView + crush when remove rows : Январь 24, 2013, 23:32
А у меня твой тестовый пример не падает.

Цитировать
QMake version 2.01a
Using Qt version 4.8.4 in /usr/lib
Страниц: 1 ... 282 283 [284] 285 286 ... 290

Страница сгенерирована за 0.174 секунд. Запросов: 23.