LINUX.ORG.RU

Сообщения g-71

 

[ GTK+] Как мне сделать приведение GdkColor из GtkColorButton в guint32

Мне приходится пользоваться низкоуровневыми функциями рисования (не буду объяснятиь почему - долгая история).

например:

gdk_rgb_gc_set_foreground(gc, 0x000000);
gdk_draw_rectangle(...);

У меня есть GtkColorButton у него есть метод gtk_color_button_get_color

GdkColor color;
gtk_color_button_get_color (mwo->colorbuttonBG, &color);

как мне преобразовать color типа GdkColor в guint32 ?

GdkColor это структура

typedef struct {
  guint32 pixel;
  guint16 red;
  guint16 green;
  guint16 blue;
} GdkColor;

guint32 это

typedef unsigned int guint32;

g-71
()

Векторная реализация resize для объектов в контейнере

Допустим есть некий объект-контейнер в виде прямоугольника на холсте, с координатой в левом верхнем углу (x1, y1) и координатой (x2, y2) в правом нижнем. Я делаю resize - т.е. например мышкой цепляюсь за нижний маркер этого контейнера и тяну его (пусть будет вниз), как правильно реализовать изменение размеров объетов которые лежат в контейнере. Размеры объектов в контейнере известны.

g-71
()

[C++] Посоветуйте что-нибудь почитать про работу с памятью

Можете посоветовать книги, статьи про работу с памятью в C++. Теория (какая есть, какие ограничения, пределы), как правильно выделять, исключения, решение проблем переполнения стека... и т.д.
Желательно конечно на русском (в приоритете так сказать), но можно и на английском языке. Спасибо.

 

g-71
()

Посоветуйте ICQ клиент для Ubuntu Linux

Pidgin ваще не коннектит, пишет то пароль неправильный, то еще что-то

qutIM - проблемы, с кодировкой, многие мои сообщения прочитать не могут.


Что посоветуйте?

g-71
()

[C++] Вопрос начинающего программиста. По поводу хранения объектов классов

Например, у меня есть класс CRectangle (наследуется от CDrawObject). В нём хранятся данные для описания прямоугольника. Объекты этого класса хранятся в поле list<CDrawObject*> m_Objects; класса CCompositePrimitive. Объект CCompositePrimitive объявлен так

CCompositePrimitive m_DrawOjects;

Т.е. чтобы добавить новый объект в DrawOjects, я вызываю соответствующий метод Add(..) и выделяю память в куче для CRectangle

void CCompositePrimitive::Add() {
 Objects.push_back(new Rectangle(параметры конструктора))
}

ну и потом в деструкторе не забываю удалять

Вопрос вот в чём: где у меня (в какой памяти: в куче или стеке)? хранятся все объект.

Спасибо, извиняюсь, за глупый вопрос

 

g-71
()

[C++] Ошибки во время выполнения при добавлении поля в классе

Есть класс 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;
};
странною С памятью проблемы?
*** glibc detected *** ./ScadaGraphic: malloc(): smallbin double linked list corrupted: 0x08e70400 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xe83591]
/lib/tls/i686/cmov/libc.so.6(+0x6e710)[0xe86710]
/lib/tls/i686/cmov/libc.so.6(__libc_malloc+0x5c)[0xe87f9c]
/usr/lib/libcairo.so.2(+0x28315)[0xdc6315]
/usr/lib/libcairo.so.2(+0x495b1)[0xde75b1]
/usr/lib/libcairo.so.2(+0x2dd1f)[0xdcbd1f]
/usr/lib/libcairo.so.2(+0x2df8d)[0xdcbf8d]
/usr/lib/libcairo.so.2(+0x14ee8)[0xdb2ee8]
/usr/lib/libcairo.so.2(cairo_fill_preserve+0x2d)[0xdacf6d]
/usr/lib/libcairo.so.2(cairo_fill+0x12)[0xdacf92]
......
Из-за чего это может случится?

 

g-71
()

[GTK+] Вылетают непонятные warnings при работе с GtkTreeView

Создал GTK+ приложение, всю визуализацию сделал в Glade. Компилится нормально, но при запуске вылетает куча warning. См. ниже

int main( int argc, char **argv )
{
    GtkBuilder *builder;
    GtkWidget *topWindow;
    GtkTreeView *treeView;
    GtkListStore  *treeStore;
        
    GError *error = NULL;
    gtk_init( &argc, &argv ); 
    builder = gtk_builder_new();
    if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) )
    {
        g_warning( "%s", error->message );
        g_free( error );
        return( 1 );
    }
 

   topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "topWindow"));
   treeStore = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore"));
   treeView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
   
   entry1 = GTK_ENTRY(gtk_builder_get_object(builder, "entry1"));
   entry2 = GTK_ENTRY(gtk_builder_get_object(builder, "entry2"));
   entry3 = GTK_ENTRY(gtk_builder_get_object(builder, "entry3"));
   
   gtk_builder_connect_signals (builder, NULL); 
   g_object_unref( G_OBJECT( builder ) );
   
   gtk_widget_show( topWindow );
 
   gtk_main();

   return( 0 );
}

При выполнении программы сразу же вылетают 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'

Вот как в Glade XML описывается GtkTreeView

 <object class="GtkTreeView" id="treeview">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="model">liststore</property>
                <property name="search_column">2</property>
                <child>
                  <object class="GtkTreeViewColumn" id="treeviewcolumn1">
                    <property name="title">&#x418;&#x43C;&#x44F;</property>
                    <child>
                      <object class="GtkCellRendererText" id="cellrenderertext1"/>
                      <attributes>
                        <attribute name="xalign">0</attribute>
                        <attribute name="sensitive">0</attribute>
                        <attribute name="text">0</attribute>
                      </attributes>
                    </child>
                  </object>
                </child>
                <child>
                  <object class="GtkTreeViewColumn" id="treeviewcolumn2">
                    <property name="title">&#x418;&#x43A;&#x441;</property>
                    <child>
                      <object class="GtkCellRendererText" id="cellrenderertext2"/>
                      <attributes>
                        <attribute name="text">1</attribute>
                      </attributes>
                    </child>
                  </object>
                </child>
                <child>
                  <object class="GtkTreeViewColumn" id="treeviewcolumn3">
                    <property name="title">&#x418;&#x433;&#x440;&#x435;&#x43A;</property>
                    <child>
                      <object class="GtkCellRendererText" id="cellrenderertext3"/>
                      <attributes>
                        <attribute name="text">2</attribute>
                      </attributes>
                    </child>
                  </object>
                </child>
              </object>
            </child>
            <child type="label">
              <object class="GtkLabel" id="label1">
                <property name="visible">True</property>
                <property name="label" translatable="yes"><b>TreeView</b></property>
                <property name="use_markup">True</property>
              </object>
            </child>
          </object>

В чём может быть проблема?

g-71
()

В чём особенность использования \r\n и как сделать переход на новую строку в string?

Я так понял что для перехода на новую строку в DOS/Windows используется \r\n, а в Linux \n. У меня в string записывается, считываемая строка из XML содержащая в конце \r\n. Но переход на новую строку не осуществляется при дальнейшем использовании. Что можно сделать? как правильно обработать \r\n чтобы потом при использовании работал переход на новую строку. Может парсить «\r\n» ?

g-71
()

[GTK] Opensource проекты на GTK+, где реализован MDI

где можно посмотреть достаточно простые проекты на GTK+ (на C/C++), в которых реализован многооконные интерфейс, взаимодействие между виджетами, передача каких-то значений между ними. Интересно посмотреть на саму реализацию этого в GTK+, ввиду некоторых особенностей этого фреймворка.

 

g-71
()

Графический векторный редактор или фреймворк на C++ с открытым исходным кодом

Посоветуйте, пожалуйста, какие-нибудь очень простейшие векторные редакторы или фрейворки на C++ с открытым исходным кодом.

Основные моменты, которые хочется увидеть:
Организацию классов самих примитивов, манипуляций над ними
Примитивы: линии, прямоугольники, многоугольники, эллипсы
Группировка примитивов (составные граф. объекты), групповые действия над ними (перемещение, изменение размера, цвета)

искал на codeproject, но ничего особо не нашел.

можно даже какие-то незавершенные проекты (и даже лучше будет, если ненавороченно будет), просто посмотреть как это делается.

g-71
()

[Glade] GtkWindow не становится модальным

Возникла проблема вызова окна 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);

событие вызова вот:

// открытие окна свойств
extern "C" void on_imageMenuItemProperties_activate(GtkWidget *widget)
{
	gtk_widget_show(propertiesWindow);
}

И еще вопрос: как мне лучше передать в окно свойств объект DrawObjects моего типа данных CCompositePrimitive;

CCompositePrimitive mDrawObjects;

 

g-71
()

Есть ли смысл использовать c++ интерфейс gtkmm для библиотеки gtk+

В данный момент разрабатывается проект на GTK+, есть ли смысл переводить его на gtkmm?

какие могут возникнуть проблемы?

g-71
()

gtkmm. Проблема с срабатыванием сигнала signal_button_press_event()

Использую библиотеку gtkmm. Возникла проблема с реакцией на событие button_press_event - её попросту нет.

событие перерисовки холста expose_event() нормально работает

pDrawingArea->signal_expose_event().connect(sigc::ptr_fun(&on_DrawingArea_Expose));

а вот button_press_event абсолютно не вызывается: ни у button ни drawingarea

pDrawingArea->signal_expose_event().connect(sigc::ptr_fun(&on_DrawingArea_Expose));

...

pButton->signal_button_press_event().connect(sigc::ptr_fun(&on_button_press_event));

Гуглил по этой теме, никаких конкретных ответов нет. Кто-то пишет, что это баг gtkmm

вот код

#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <libglade-2.0/glade/glade-xml.h>
#include <gtkmm-2.4/gtkmm/builder.h>
#include <gtkmm-2.4/gtkmm/drawingarea.h>
#include <gtkmm-2.4/gtkmm/button.h>

bool on_button_press_event(GdkEventButton* event)
{
    g_print("on_button_press_event");
    return true;
}

void on_clicked()
{
    g_print("Click!");
}

bool on_DrawingArea_Click(GdkEventButton* event)
{
    g_print("Click on DrawingArea\n");
    return true;
}

bool on_DrawingArea_Expose(GdkEventExpose* event)
{
    g_print("on_DrawingArea_Expose\n");
    return true;
}

int main (int argc, char* argv[])
{
    Gtk::Main kit(argc, argv);

    Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create();

    try
    {
     refBuilder->add_from_file("mainwindow.glade");
    }
    catch(...)
    {
     g_print("No");
    }
    

    Gtk::Window* pWindow = 0;
    refBuilder->get_widget("window1", pWindow);
    if (pWindow)
    {
        Gtk::DrawingArea* pDrawingArea = 0;
        refBuilder->get_widget("drawingarea1", pDrawingArea);
        pDrawingArea->signal_button_press_event().connect(sigc::ptr_fun(&on_DrawingArea_Click));
        pDrawingArea->signal_expose_event().connect(sigc::ptr_fun(&on_DrawingArea_Expose));

        Gtk::Button* pButton = 0;
        refBuilder->get_widget("button1", pButton);
        pButton->signal_clicked().connect(sigc::ptr_fun(on_clicked));
        pButton->signal_button_press_event().connect(sigc::ptr_fun(&on_button_press_event));
        
        Gtk::Main::run(*pWindow);
        
    }
    return 0;
}
g-71
()

Микропроцессор Эльбрус S и поддержка GTK+, Cairo, Qt

В декабре 2010 года в ЗАО «МЦСТ» завершились:

приемка ОКР в части процессорной микросхемы (системы на кристалле) «Эльбрус-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. Компилятор поддерживает режимы нативной и кросс-компиляции.

вот ссылка http://forum.xard.ru/m_39933/mpage_1/key_/tm.htm#39933

Вопрос в следующем: будет ли поддерживаться программы разработанные с помощью библиотеки GTK+ (до какой версии, если есть ограничения) будет ли поддерживаться библиотека Cairo (она с версии 2.8 интегрирована в GTK+) и будет ли поддерживаться библиотека Qt?

g-71
()

Библиотека Cairo. Попадает ли точка x, y на отрезок

Дан отрезок с координатами x1 = 50, y1 = 75, x2 = 200, y2 = 75 есть ли какая-то встроенная функция в библиотеке Cairo, которая возвратит true если точка x,y попадает на эту прямую или наоброт

cairo_move_to (cr, 50.0, 75.0);
cairo_line_to (cr, 200.0, 75.0);
либо какой-то эквивалент этому, за исключением собственного расчёта по уравнению прямой

g-71
()

Нужен совет по организации классов

По паттерну «Компановщик» организованы классы для рисования на холсте. Все примитивы (CRectangle, CEllipse, CLine ) наследуются от класса CPrimitive. Класс CDrawObject - абстрактный там содержится метод Draw, isInsidePoint(x,y) - попадает ли координата x,y объект. Класс CCompositePrimitive представляет собой составные объекты (сгруппированые из CRectangle, CEllipse, CLine )

http://img155.imageshack.us/img155/8018/classes2j.png

Хотел бы услышать какие-то советы: как организовать маркеры ( ткнул в объект, выводится его обрамляющая рамка, работая с ней, можно изменять размеры, координаты и пр. объекта.)
и соединения между объектами, т.е. грубо говоря линии, которые соединяют два объекта и перемещаются если перемещается объект.

g-71
()

GTK+. Проблема событием появления всплывающего меню.

В 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. Проблема в связывании сигнала

g_signal_connect_swapped (G_OBJECT (butShow), "clicked", G_CALLBACK (button_press), G_OBJECT (menu));

Во время запуска в консоле пишется следующее

(charter:3717): GLib-GObject-WARNING **: invalid (NULL) pointer instance

(charter:3717): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed

ну и понятное дело меню не выпадает

вот полный код программы

#include <gtk/gtk.h>
#include <string.h>
 
#define UI_FILE "glade.glade"

void on_window1_destroy (GtkObject *object, gpointer user_data)
{
 gtk_main_quit();
}

// обработка нажатия на кнопку и появление выдающего меню
static gint button_press( GtkWidget *widget, GdkEvent *event )
{
 if (event->type == GDK_BUTTON_PRESS) 
 {
  GdkEventButton *bevent = (GdkEventButton *) event; 
  gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
  return TRUE;
 }
 return FALSE;
}
 
int main( int argc, char **argv )
{
    GtkBuilder *builder;
    GtkWidget *topWindow;
    GtkButton *butShow;
    GtkWidget *menu;
    GtkWidget *menu_items;

    
    GError *error = NULL;
    gtk_init( &argc, &argv ); 
    builder = gtk_builder_new();
    if( ! gtk_builder_add_from_file( builder, UI_FILE, &error ) )
    {
        g_warning( "%s", error->message );
        g_free( error );
        return( 1 );
    }
 
   // пункты меню
   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);
    }
 
   topWindow = GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
   butShow = GTK_BUTTON(gtk_builder_get_object(builder, "butShow1"));
   gtk_builder_connect_signals (builder, NULL); 
   g_object_unref( G_OBJECT( builder ) );
   
   /* здесь проблема */
   g_signal_connect_swapped (G_OBJECT (butShow), "clicked", G_CALLBACK (button_press), G_OBJECT (menu));

   gtk_widget_show( topWindow );
 
   gtk_main();

   return( 0 );
}
g-71
()

Применение паттерна Компоновщик (Composity) для фигур (группировкой, расгруппировка)

Стоит задача разработать и реализовать графический редактор с набором примитивов (прямоугольники, эллипсы и т.д.), в котором возможна группировка этих примитивов в составные и работа с ними как с одним примитивом - как в Word группировка выделенных объектов. Я решил воспользоваться паттерном Компоновщик (Composity). Ниже представлен некий прототип реализации. Вообще примитивы будут отображаться на холсте.

Я решил хранить все объекты в контейнере m_DrawObjects

list<DrawingElement*> m_DrawObjects;

так называемый корень, хотя это не совсем корень, например можно создать root - корреной составной примитив и уже от него начинать в него класть все объекты.

Я пошел немного другим путём я с помощью итераторов перемещаюсь по контейнеру и перемещаю (перегруппировываю) примитивы. В самом низу представлено как всё происходит.

Вопрос: это вообще нормально сделано или как-то криво? Может быть есть способы более правильные? В книжки GoF пишется, про создание указателей на потомком, например - с этим еще не разобрался.

у меня например группировка осуществляется следующим образом: сначало добавляем необходимо примитив в какой-то составной объект

(*i_DrawObjects)->Add(*++m_DrawObjects.begin());

а потом удаляем его оттуда где он был

m_DrawObjects.erase(++m_DrawObjects.begin());

может быть способы более правильные и эффективные?

вот весь код

вот результат выполнения

g-71
()

STL. Как оптимальнее сделать предикат с каким-то еще необходимыми параметрами

Есть выполнение функции find_if с предикатом pr

bool pr(DrawObjects* obj)
{
	return obj->isNormal();
}
...
i_objects = find_if(m_objects.begin(), m_objects.end(), pr);
...

как оптимальнее сделать так, чтобы в предикат передать какие-то еще параметры:

bool pr(DrawObjects* obj, int l, int h)
{
	return obj->isNormal(l, h);
}

и возможно ли это?

g-71
()

Управления ключами в беспроводной сети с использованием local-RADIUS сервера

Извиняюсь, что немного не в тему, но всё же...

Может кто-нибудь доходчиво объяснить процесс управления ключами в беспроводной сети при организации беспроводного соединения с использованием 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

Схема аутентификации LEAP

http://i052.radikal.ru/1012/21/568437b748e9.png

g-71
()

RSS подписка на новые темы