crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
Delphist
  опции профиля:
сообщение 11.8.2008, 9:24
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Возникла следующая проблема. У меня есть класс вида:
CMyClass
{
public:
    
    CMyClass();

    inline QString getName() const {return m_sName;}
                inline CMyClass *getParent() {return m_pOwner;}
    inline CMyClass& operator[](QString sKey) {return getProperty(sKey);}

                ...
    
private:
    CMyClass& getProperty(QString sKey);
    QHash<QString,CMyClass*> m_Properties;
    
    QString           m_sName;
    CMyClass      *m_pOwner;
};


по сути это класс иерархической структуры, поэтому для его наглядного изображения я использовал принцип модель-представления,
в качестве представления я использую TreeView в качестве модели свой класс наследованный от QAbstractItemModel.
Проблема следующая, когда у меня дерево вида:
Obj1 (rootNode)
|
|__Child1
| |
| |__Child11
|
|__Child2

то моя модель не отобраэает rootNode, а отображает вот так, в чем может быть проблема.
|__Child1
| |
| |__Child11
|
|__Child2

1. Из-за чего может возникать такая проблема?
2. Может у кого есть, примеры реализации отображения деревьем использующие в качестве контейнера QHash(QString, SameClass*)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.8.2008, 10:15
Сообщение #2


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

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

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




Репутация:   94  


давай свой код сюда.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 11.8.2008, 10:43
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


rootIsDecorated. Оно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delphist
  опции профиля:
сообщение 11.8.2008, 11:21
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 11.8.2008, 10:15) *
давай свой код сюда.

Даю весь исходник (MyMonitor.zip в прикрепленном файле), не нужное я оттуда повыкидал, кое что переименовал, но суть работы остается

Цитата(Tonal @ 11.8.2008, 10:43) *
rootIsDecorated. Оно?

Нет не оно

Сообщение отредактировал Delphist - 11.8.2008, 11:58
Прикрепленные файлы
Прикрепленный файл  MyMonitor.zip ( 9.27 килобайт ) Кол-во скачиваний: 172
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delphist
  опции профиля:
сообщение 11.8.2008, 18:42
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Да, вижу вопрос не из простых.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.8.2008, 20:05
Сообщение #6


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

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

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




Репутация:   94  


скачал твои исходники, посмотрю.
Так на в скидку о проблеме, видимо ты модель не коректно строиш из свои данных, а именно см. рисунки Классы моделей, может ты не обратил внимание на Корневой Элемент, это фиктивный элемент. и он видимо у тебя и возвращается моделью.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delphist
  опции профиля:
сообщение 12.8.2008, 9:16
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 11.8.2008, 20:05) *
Так на в скидку о проблеме, видимо ты модель не коректно

да вроде все правильно делаю, а там фиг его знает...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 12.8.2008, 11:09
Сообщение #8


Участник
**

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

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




Репутация:   0  


Litkevich Yuriy, Мдя... Я уже помучкался с этим кодом )))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delphist
  опции профиля:
сообщение 13.8.2008, 17:28
Сообщение #9


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Народ помагите. не оставляйте меня одного с этой проблемой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.8.2008, 6:33
Сообщение #10


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

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

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




Репутация:   94  


Т.к. не всегда и не у всех есть желание или время подробно изучать код, расказывай подробности.
1) Lib\my.cpp(h)
2) main.cpp - тут понятно
3) mymodel.cpp(h)
4) mymonitor.cpp(h)
5) mymonitor.qrc
6) mymonitor.ui
7) sdmtest.cpp(h)

Вопросы по каждому пункту одни и теже:
1) Для чего нужен этот файл (что в нем и какую роль выполняет)?
2) Как связан с другими файлами и зачем?

Отдельный вопрос для чего нужен отдельный каталог Lib?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Delphist
  опции профиля:
сообщение 15.8.2008, 11:20
Сообщение #11


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 15.8.2008, 6:33) *
Т.к. не всегда и не у всех есть желание или время подробно изучать код, расказывай подробности.
1) Lib\my.cpp(h)
2) main.cpp - тут понятно
3) mymodel.cpp(h)
4) mymonitor.cpp(h)
5) mymonitor.qrc
6) mymonitor.ui
7) sdmtest.cpp(h)

Вопросы по каждому пункту одни и теже:
1) Для чего нужен этот файл (что в нем и какую роль выполняет)?
2) Как связан с другими файлами и зачем?

Отдельный вопрос для чего нужен отдельный каталог Lib?

Каталог Lib нужен просто для того чтобы отделить сторонние файлы от проекта который я разрабатываю
my.cpp - собственно класс иерархической структуры - за счет использования QHash. Даный класс испоьзуется в модели
mymodel.cpp - здесь реализации модели которая позволяет конечному пользователю через представление TreeView увидеть класс (находящийся в my.cpp) в виде дерева.
mymonitor - здесь собственно реализация взаимодействия действий пользователя через GUI с моделью
sdmtest.cpp - временный класс нужный просто для забивания произвольными данными класс из my.cpp для того чтобы просто посмотреть как же выводиться дерево
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.8.2008, 19:00
Сообщение #12


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

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

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




Репутация:   94  


вообщем как бы я начал делать твою прогу.
Сделал бы интерфейс, который компилится, но несодержит модели и следовательно данные.
1) Главный файл не содержит ничего лишнего, только стандартный набор (обычно его засовывают в клас унаследованый от QApplication, но пока так) + главный виджет программы
1.1) файл main.cpp
/*!
 \file main.cpp
 \brief Основной файл программы.
 */

#include <QApplication>
#include <QStyle>
#include <QStyleFactory>
#include <QTextCodec>
#include <QLocale>
#include <QTranslator>
#include <QDir> 

#include "mymonitor.h"

int main(int argc, char *argv[])
{
//    Q_INIT_RESOURCE(mdi);

  QDir            dir_plugin;    // каталог плагинов
  QStyle        *pStyle;    // стиль ПО
  QString        locale;        // язык локали
  QTranslator    *qttr;        // переводчик программы
  QStringList     list_path;    // Список путей
  
    QApplication app(argc, argv);
    
    // Устанавливаем кодеки
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));// без этой кодировки с БД проблема
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr()
    
    // Устанавливаем свойства программы (понадобится для настроек)
    QCoreApplication::setOrganizationName(QObject::tr("ЗАО \"Тест\""));
    QCoreApplication::setApplicationName(QObject::tr("Тест модель"));
    
    // устанавливаем путь к плагинам (добавим каталог бинаря)
    dir_plugin = QDir(qApp->applicationDirPath()+"/plugins/");
    list_path << dir_plugin.absolutePath() << app.libraryPaths ();
    app.setLibraryPaths(list_path); 
    
    // Устанавливаем стили
    pStyle = QStyleFactory::create("Plastique");//Cleanlooks Plastique windows windowsxp
    QApplication::setStyle(pStyle);
    app.setPalette(pStyle->standardPalette());
    
    // Устанавливаем превод библиотек Qt
    locale = QLocale::system().name();    // запрос языка (например: "ru")
    qttr = new QTranslator; 
    qttr->load(QString("./qt_") + locale); // загрузка файла ./qt_*.qm
    app.installTranslator(qttr);         // устанока переводчика    
    
    // Главный виджет программы
    MyMonitor mainWin;
    mainWin.show();

    return app.exec();
}


2) Главный виджет
2.1) Файл mymonitor.ui Прикрепленный файл  mymonitor.zip ( 355 байт ) Кол-во скачиваний: 211

создан на основе QWidget, т.к. ты не использовал ничего из особенностей QMainWindow, и сможешь встроить его как обычный виджет в любую программу, по завершении тестов.
Имя главного класса: MyMonitor
Имя древовидного представления: view

2.2) На его основе создаю класс MyMonitor (два файла mymonitor.cpp/h) с монежественным наследованием, от QWidget и от того что в ui-файле
mymonitor.h
/*!
 *    \file    mymonitor.h
 *    \brief    Интерфейс класса "MyMonitor".
 */
#ifndef MYMONITOR_H
#define MYMONITOR_H

#include "ui_mymonitor.h"

/*!
 *    \class MyMonitor
 *    \brief Класс MyMonitor.
 * 
 *     Этот класс является главным окном программы
 */
class MyMonitor : public QWidget, public Ui::MyMonitor
{
    Q_OBJECT

public:
    MyMonitor(QWidget *p_parent = 0);



};

#endif //MYMONITOR_H

mymonitor.cpp
/*!
 *    \file    mymonitor.cpp
 *    \brief    Реализация класса "MyMonitor".
 */

#include <QtGui>

#include "mymonitor.h"


MyMonitor::MyMonitor(QWidget* p_parent) : QWidget(p_parent)
{
    setupUi(this);

    setWindowTitle(tr("Тест модели-дерева"));
}

Все. Это должно компилится и к этому более не возвращаемся, вся прочая работа по подключению к модели ведется в конструкторе MyMonitor.

Далее мои действия были бы такими:
3) Продумывание способа хранения данных.
4) Создание модели
5) Подключение ее к представлению, как указано выше.

------
Теперь вопрос, откуда идея: "класс иерархической структуры - за счет использования QHash"?

Т.е. почему такой способ хранения данных? Откуда берутся данные?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Delphist_*_*
сообщение 17.8.2008, 15:32
Сообщение #13





Гости








    


Цитата(Litkevich Yuriy @ 15.8.2008, 19:00) *
Теперь вопрос, откуда идея: "класс иерархической структуры - за счет использования QHash"?

Т.е. почему такой способ хранения данных? Откуда берутся данные?

В моем примере MyMonitor.zip (который здесь представлен) все подробно показано как заполняется класс иерархической структуры, затем показано как этот класс используется в моей модели, и мой вопрос звучал так: почему не отображается rootNoode, нормальный ответ должен звучать приблизина так Delphist у тебя там то там то есть ошибка, если же у меня все правильно, то сказать причину по которой не выводится rootNode. Вот и все. А заниматься демагогией можно бесконечно долго ток вопроса это не решает. Поэтому, большая просьба, давать ответы по сути, а не спрашивать "откуда идея: "класс иерархической структуры - за счет использования QHash", почему такой способ хранения. Так и хочется сказать по качену, но сдержусь и отвечу, есть проект который разрабатывал не я, есть тех. зад. которое диктует мне руководство, а я всего лишь программист, и должен писать в том фундаменте который был создан без меня. и класс указанный в my.cpp он уже существует очень давно, и менять QHash на QList из-за меня не будет. Вот так вот.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 30.6.2025, 8:26