UML
Посоветуйте что-нибудь...
- чем легко можно рисовать сабжевые диаграммы и смехы;
- что автоматически проанализировав исходники, можно построить сабж, или по диаграмме может сгенерировать исходники.
Посоветуйте что-нибудь...
- чем легко можно рисовать сабжевые диаграммы и смехы;
- что автоматически проанализировав исходники, можно построить сабж, или по диаграмме может сгенерировать исходники.
Необходимо написать демон, который мог бы отслеживать список процессов и корректность их выполнения. В случае падения процесса, некорректного завершения, необходимо это отлавливать и получать его первичный, эффективный идентификаторы, имя пользователя и идентификатор потока, в котором произошла ошибка.
Так же всю доступную информацию по ошибке.
Это делается через прерывания? Необходимо ли писать модуль ядра? В какую вообще сторону копать?
Я системным программированием никогда не занимался, в основном прикладным. Но поставили такую задачу...
Посоветуйте что-нибудь =)
Произвожу платную переустановку и настройку ОС Linux/Windows.
Удалить Linux - бесплатно.
Удалить Windows - 1000р.
Установить Linux - 2000р.
Установить Windows - 1000р.
Настройка Linux - 2000р.
Настройка Windows - 1000р.
Постоянным клиентам скидка.
Цены указаны за одну рабочую станцию.
Пишу некий плагин для designer, который должен отображать заданную модель в QColumnView, QTreeView, QListView и QTableView.
Мне позарез нужен сигнал изменения выделения списка. По умолчанию ни один из классов иерархии не предоставляет такого. Единственный способ переопределить виртуальный protected метод selectionChanged класса QAbstractItemView, от которого наследуются перечисленные виджеты.
В любом случае придется создавать свои виджеты и наследоваться от перечисленных. Но в каждом переопределять названный метод - бред, ибо код генерации сигнала одинаковый.
Поэтому я решил описать свой класс, который наследуется от QAbstractItemView, и уже от него наследовать свои виджеты, в совокупности со стандартными виджетами отображения модели.
Казалось бы: все просто и логично.
На этой картинке отображена предполагаемая иерархия классов: http://img692.imageshack.us/img692/1063/classes.png
Но возникла проблемы с множественным наследованием. Возникает два экземпляра QAbstractItemView. Эта проблема может быть решена с помощью использования виртуальных базовых классов, но что-то у меня не получается.
Как я понял, при описании классов, которые содержат общий базовый, последний должен наследоваться с использованием ключевого слова «virtual».
То есть при описании класса QColumnView он должен наследоваться от QAbstractItemView с упоминанием virtual, так же, как и при наследовании AbstractItemView от QAbstractItemView.
Только вот в реализацию классов Qt мне не залезть, а то, что я описываю у себя - недостаточно.
Я описываю так: class AbstractItemView: virtual public QAbstractItemView... class ColumnView: public QColumnView, public AbstractItemView...
При компиляции возникают такие ошибки:
1>.\filesbrowserwidget.cpp(9) : error C2259: 'ColumnView' : cannot instantiate abstract class
1> due to following members:
1> 'QRect QAbstractItemView::visualRect(const QModelIndex &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(196) : see declaration of 'QAbstractItemView::visualRect'
1> 'void QAbstractItemView::scrollTo(const QModelIndex &,QAbstractItemView::ScrollHint)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(197) : see declaration of 'QAbstractItemView::scrollTo'
1> 'QModelIndex QAbstractItemView::indexAt(const QPoint &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(198) : see declaration of 'QAbstractItemView::indexAt'
1> 'QModelIndex QAbstractItemView::moveCursor(QAbstractItemView::CursorAction,Qt::KeyboardModifiers)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(275) : see declaration of 'QAbstractItemView::moveCursor'
1> 'int QAbstractItemView::horizontalOffset(void) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(278) : see declaration of 'QAbstractItemView::horizontalOffset'
1> 'int QAbstractItemView::verticalOffset(void) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(279) : see declaration of 'QAbstractItemView::verticalOffset'
1> 'bool QAbstractItemView::isIndexHidden(const QModelIndex &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(281) : see declaration of 'QAbstractItemView::isIndexHidden'
1> 'void QAbstractItemView::setSelection(const QRect &,QItemSelectionModel::SelectionFlags)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(283) : see declaration of 'QAbstractItemView::setSelection'
1> 'QRegion QAbstractItemView::visualRegionForSelection(const QItemSelection &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(284) : see declaration of 'QAbstractItemView::visualRegionForSelection'
1>.\filesbrowserwidget.cpp(10) : error C2385: ambiguous access of 'setModel'
1> could be the 'setModel' in base 'QColumnView'
1> or could be the 'setModel' in base 'QAbstractItemView'
1>.\filesbrowserwidget.cpp(10) : error C3861: 'setModel': identifier not found
1>.\filesbrowserwidget.cpp(11) : error C2594: 'argument' : ambiguous conversions from 'ColumnView *' to 'QWidget *'
1>.\filesbrowserwidget.cpp(13) : error C2259: 'ListView' : cannot instantiate abstract class
1> due to following members:
1> 'QRect QAbstractItemView::visualRect(const QModelIndex &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(196) : see declaration of 'QAbstractItemView::visualRect'
1> 'void QAbstractItemView::scrollTo(const QModelIndex &,QAbstractItemView::ScrollHint)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(197) : see declaration of 'QAbstractItemView::scrollTo'
1> 'QModelIndex QAbstractItemView::indexAt(const QPoint &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(198) : see declaration of 'QAbstractItemView::indexAt'
1> 'QModelIndex QAbstractItemView::moveCursor(QAbstractItemView::CursorAction,Qt::KeyboardModifiers)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(275) : see declaration of 'QAbstractItemView::moveCursor'
1> 'int QAbstractItemView::horizontalOffset(void) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(278) : see declaration of 'QAbstractItemView::horizontalOffset'
1> 'int QAbstractItemView::verticalOffset(void) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(279) : see declaration of 'QAbstractItemView::verticalOffset'
1> 'bool QAbstractItemView::isIndexHidden(const QModelIndex &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(281) : see declaration of 'QAbstractItemView::isIndexHidden'
1> 'void QAbstractItemView::setSelection(const QRect &,QItemSelectionModel::SelectionFlags)' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(283) : see declaration of 'QAbstractItemView::setSelection'
1> 'QRegion QAbstractItemView::visualRegionForSelection(const QItemSelection &) const' : is abstract
1> c:\development\qt\4.5.0\include\qtgui\../../src/gui/itemviews/qabstractitemview.h(284) : see declaration of 'QAbstractItemView::visualRegionForSelection'
1>.\filesbrowserwidget.cpp(14) : error C2385: ambiguous access of 'setModel'
1> could be the 'setModel' in base 'QAbstractItemView'
1> or could be the 'setModel' in base 'QAbstractItemView'
1>.\filesbrowserwidget.cpp(14) : error C3861: 'setModel': identifier not found
1>.\filesbrowserwidget.cpp(15) : error C2594: 'argument' : ambiguous conversions from 'ListView *' to 'QWidget *'
Вопрос в следующем: возможна ли реализация моего подхода и как вообще выкрутиться из ситуации, кроме как переопределения защищенных виртуальных слотов для каждого виджета и написания для них одинакового кода?