Допустим есть некий объект-контейнер в виде прямоугольника на холсте, с координатой в левом верхнем углу (x1, y1) и координатой (x2, y2) в правом нижнем. Я делаю resize - т.е. например мышкой цепляюсь за нижний маркер этого контейнера и тяну его (пусть будет вниз), как правильно реализовать изменение размеров объетов которые лежат в контейнере. Размеры объектов в контейнере известны.
Можете посоветовать книги, статьи про работу с памятью в C++. Теория (какая есть, какие ограничения, пределы), как правильно выделять, исключения, решение проблем переполнения стека... и т.д.
Желательно конечно на русском (в приоритете так сказать), но можно и на английском языке. Спасибо.
Например, у меня есть класс CRectangle (наследуется от CDrawObject). В нём хранятся данные для описания прямоугольника.
Объекты этого класса хранятся в поле list<CDrawObject*> m_Objects; класса CCompositePrimitive.
Объект CCompositePrimitive объявлен так
CCompositePrimitive m_DrawOjects;
Т.е. чтобы добавить новый объект в DrawOjects, я вызываю соответствующий метод Add(..) и выделяю память в куче для CRectangle
Есть класс CEllipse. Всё нормально работало до тех пор пока не добавил в его описание
std::list<int> m_Markers;
И сразу же повалило куча ошибок в консоли
class CEllipse :
public CDrawObject
{
public:
CEllipse(void);
CEllipse(std::string name, int posX1, int posY1, int posX2, int posY2, int widthLine);
~CEllipse(void);
..................
private:
std::list<int> m_Markers;
};
При выполнении программы сразу же вылетают WARNING,
(charter:3728): GLib-GObject-WARNING **: value "466" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "44" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "466" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "466" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "44" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "44" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "466" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "466" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "44" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
(charter:3728): GLib-GObject-WARNING **: value "44" of type `gint' is invalid or out of range for property `xalign' of type `gfloat'
Я так понял что для перехода на новую строку в DOS/Windows используется \r\n, а в Linux \n. У меня в string записывается, считываемая строка из XML содержащая в конце \r\n. Но переход на новую строку не осуществляется при дальнейшем использовании. Что можно сделать? как правильно обработать \r\n чтобы потом при использовании работал переход на новую строку. Может парсить «\r\n» ?
где можно посмотреть достаточно простые проекты на GTK+ (на C/C++), в которых реализован многооконные интерфейс, взаимодействие между виджетами, передача каких-то значений между ними. Интересно посмотреть на саму реализацию этого в GTK+, ввиду некоторых особенностей этого фреймворка.
Посоветуйте, пожалуйста, какие-нибудь очень простейшие векторные редакторы или фрейворки на C++ с открытым исходным кодом.
Основные моменты, которые хочется увидеть:
Организацию классов самих примитивов, манипуляций над ними
Примитивы: линии, прямоугольники, многоугольники, эллипсы
Группировка примитивов (составные граф. объекты), групповые действия над ними (перемещение, изменение размера, цвета)
искал на codeproject, но ничего особо не нашел.
можно даже какие-то незавершенные проекты (и даже лучше будет, если ненавороченно будет), просто посмотреть как это делается.
Возникла проблема вызова окна propertiesWindow в модальном режиме в Gtk+. Поидее окно родитель это topLevelWindow. Но я это нигде не указывал. А наверное нужно...
В Glade редакторе во вкладке General свойство Modal установил Yes
вот код:
// извлекаю главное окно окно из glade xml файла
topLevelWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topLevelWindow"));
// извлекаю окно свойств из glade xml файла
propertiesWindow = GTK_WIDGET(gtk_builder_get_object(builder, "propertiesWindow"));
для верности устанавливаю свойство модальности в true
gtk_window_set_modal(GTK_WINDOW(propertiesWindow), true);
приемка ОКР в части процессорной микросхемы (системы на кристалле) «Эльбрус-S»;
государственные испытания микросхемы (системы на кристалле) контроллера периферийных интерфейсов (КПИ);
государственные испытания 4-х процессорного модуля МВ3S/C на базе микросхемы «Эльбрус-S».
Решениями комиссий, проводивших приемку микросхемы «Эльбрус-S» и испытания микросхемы КПИ, разрешено приступить к выпуску серийных образцов микросхем и использовать серийные образцы для оснащения образцов вооружения и военной техники, а также информационно-вычислительных и управляющих систем в промышленной сфере.
Модули МВ3S/C рекомендованы комиссией для использования в качестве вычислительных средств в перспективных образцах вооружения и военной техники.
Для архитектуры Эльбрус поддерживается ОС Linux на ядре 2.6.14 в стандартной и real-time версиях. Поддерживается библиотека glibc 2.7 и множество стандартных утилит, также имеется графическая среда на базе сервера Xorg версии 6.9.0 с несколькими оконными менеджерами. Портирован большой комплект прикладных программ. В настоящее время идет работа по поддержке ядра 2.6.33 и свежей версии Xorg.
Из средств разработки поддерживаются: оптимизирующий компилятор собственной разработки (совместимый с gcc 3.4.6) для языков C, C++, Fortran, отладчик gdb, инструмент профилирования gprof. Компилятор поддерживает режимы нативной и кросс-компиляции.
Вопрос в следующем: будет ли поддерживаться программы разработанные с помощью библиотеки GTK+ (до какой версии, если есть ограничения) будет ли поддерживаться библиотека Cairo (она с версии 2.8 интегрирована в GTK+) и будет ли поддерживаться библиотека Qt?
Дан отрезок с координатами x1 = 50, y1 = 75, x2 = 200, y2 = 75
есть ли какая-то встроенная функция в библиотеке Cairo, которая возвратит true если точка x,y попадает на эту прямую или наоброт
По паттерну «Компановщик» организованы классы для рисования на холсте. Все примитивы (CRectangle, CEllipse, CLine ) наследуются от класса CPrimitive. Класс CDrawObject - абстрактный там содержится метод Draw, isInsidePoint(x,y) - попадает ли координата x,y объект. Класс CCompositePrimitive представляет собой составные объекты (сгруппированые из CRectangle, CEllipse, CLine )
Хотел бы услышать какие-то советы: как организовать маркеры ( ткнул в объект, выводится его обрамляющая рамка, работая с ней, можно изменять размеры, координаты и пр. объекта.)
и соединения между объектами, т.е. грубо говоря линии, которые соединяют два объекта и перемещаются если перемещается объект.
В Glade3 я создал главное окно и на нём кнопку butShow1. С помощью GtkBuilder я получил эти объекты и присвоил их указателям topWindow и
butShow соответственно.
Вообще задача стоит сделать выпадающее меню. Но из Glade3 не получилось его добавить пока в приложении. Я создал его ручками.
// пункты меню
menu = gtk_menu_new ();
int i;
for (i = 0; i < 3; i++)
{
menu_items = gtk_menu_item_new_with_label ("123");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
gtk_widget_show (menu_items);
}
и теперь пытаюсь привязать событие clicked кнопки butShow к появлению меню. Функция button_press. Проблема в связывании сигнала
Стоит задача разработать и реализовать графический редактор с набором примитивов (прямоугольники, эллипсы и т.д.), в котором возможна группировка этих примитивов в составные и работа с ними как с одним примитивом - как в Word группировка выделенных объектов.
Я решил воспользоваться паттерном Компоновщик (Composity).
Ниже представлен некий прототип реализации. Вообще примитивы будут отображаться на холсте.
Я решил хранить все объекты в контейнере m_DrawObjects
list<DrawingElement*> m_DrawObjects;
так называемый корень, хотя это не совсем корень, например можно создать root - корреной составной примитив и уже от него начинать в него класть все объекты.
Я пошел немного другим путём я с помощью итераторов перемещаюсь по контейнеру и перемещаю (перегруппировываю) примитивы. В самом низу представлено как всё происходит.
Вопрос: это вообще нормально сделано или как-то криво? Может быть есть способы более правильные?
В книжки GoF пишется, про создание указателей на потомком, например - с этим еще не разобрался.
у меня например группировка осуществляется следующим образом:
сначало добавляем необходимо примитив в какой-то составной объект
(*i_DrawObjects)->Add(*++m_DrawObjects.begin());
а потом удаляем его оттуда где он был
m_DrawObjects.erase(++m_DrawObjects.begin());
может быть способы более правильные и эффективные?
Может кто-нибудь доходчиво объяснить процесс управления ключами в беспроводной сети при организации беспроводного соединения с использованием local-RADIUS сервера на точке доступа.
Есть так называемый PMK - Pairwise Mater Key и в документации написано что он получен: EAP negotiation, т.е. согласно EAP аутентификации.
Вот команды, которые мы вводили. key shared_secret - получается будет ключом связи точки доступа и клиентского адаптера? user test password test - это для конкретного пользователя логин и пароль?
AP1(config)#dot11 ssid Net1
AP1(config-ssid)#authentication open eap eap_methods
AP1(config-ssid)#authentication network-eap eap_methods
AP1(config-ssid)#authentication key-management wpa
AP1(config)#aaa new-model
AP1(config)#aaa group server radius rad_eap
AP1(config-sg-radius)#server 10.10.10.7 auth-port 1812 acct-port 1813
AP1(config-sg-radius)#exit
AP1(config)#aaa authen login eap_methods group rad_eap
AP1(config)#radius-server local
AP1(config-radsrv)#nas 10.10.10.7 key shared_secret
AP1(config-radsrv)#user test password test
AP1(config-radsrv)#exit
AP1(config)#radius-server host 10.10.10.7 auth-port 1812 acct-port 1813 key shared_secret
AP1(config)#exit
AP1#wr
Building configuration...
[OK]
Server Based Authentication: LEAP
Data Encription: TKIP
Authentication type: Open
Message Intergrity Check: Michael
=== WPA (RSN) Information Element ===
Group Cipher Suite: TKIP
Pairwise Cipher Suite(s): TKIP
Authentication Type(s): 802.1x
Preauthentication: No
No WEP 0 with pairwise: No
PTKSA Replay Counters: 4
GTKSA Replay Counters: 4