crossplatform.ru

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

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
frg10
  опции профиля:
сообщение 9.11.2009, 21:45
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

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




Репутация:   2  


Disclaimer: пишу все чисто теоретически - на практике ничего из нижеперечисленного не делал.

Если вы действительно хотите взяться за это, то приготовьтесь потянуть себе много всего из QtCreator. Вот мне кажется минимум:
1) ExtensionSystem - загрузка и управление плагинами
2) Aggregation - аггрегация объектов
3) CorePlugin - собственно ядро QtCreator. Требуется для работы любого плагина.
4) TextEditor - требуется для DuiEditor
5) Find, QuickOpen - требуются для TextEditor
6) Сам DuiEditor

Далее приготовьтесь:
1) Необходимо загрузить и инициализировать все плагины. Этим занимается PluginManager из ExtensionSystem. Как это делается можно посмотреть в qtcreator/app/main.cpp.
2) Core при загрузке создает главное окно приложения. Т.е. создастся окно QtCreator с меню и панельками.
3) Когда плагин инициализируется, он регистрирует все объекты, которые предоставляет, в PluginManager. Соответственно, если вы хотите использовать этот функционал, то вам нужно получать эти объекты из PluginManager-а или можно воспользоваться интерфейсом ICore. Второй вариант гораздо проще.
Конкретно DuiEditor экспортирует:
- фабрику классов для создания редакторов.
- визард для создания QML файлов
- объект Code Completion
- подсветку редактора

Для примера, допустим что вам нужно открыть редактор QML. Класс ICore предоставляет доступ к различным менеджерам. В том числе, там есть EditorManager. Этот менеджер управляет редакторами и может их создавать (внутри у него есть список всех зарегистрированных фабрик). Создать редактор можно так:
IEditor* editor = ICore::instance()->editorManager()->openEditor(fileName, "application/x-dui");

mimetype передавать не обязательно, если файл имеет расширение qml.
Получаем указатель на интерфейс IEditor - это и есть редактор. Через функцию IEditor::widget() получаем окно и делаем с ним все что угодно.

Надеюсь помог. :)
Если хотите дальше разрабатывать эту тему, то без ковыряния исходников никак не обойтись.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 10.11.2009, 10:19
Сообщение #12





Гости








    


frg10
Копание в коде привело меня к такому результату
QString titlePattern = tr("Memory $");

        EditorManager* manager = EditorManager::instance();
        IEditor* editor = manager->openEditorWithContents(Core::Constants::K_DEFAULT_TEXT_EDITOR, &titlePattern);

но такой код генерит исключение. Может подскажете где копать , загрузить библиотеки или еще чего установить для приложения?
Причина редактирования: не цитируй целыми сообщениями
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 10.11.2009, 12:38
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

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




Репутация:   2  


А что, то что я написал не работает? Вы все плагины загрузили?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 10.11.2009, 15:26
Сообщение #14





Гости








    


Цитата(frg10 @ 10.11.2009, 12:38) *
А что, то что я написал не работает? Вы все плагины загрузили?

Не работает
ASSERTION style FAILED AT manhattanstyle.cpp:101

Делал так , скопировал из main.cpp
ExtensionSystem::PluginManager pluginManager;
    pluginManager.setFileExtension(QLatin1String("pluginspec"));

    QStringList pluginPaths;
    pluginPaths << qApp->applicationDirPath()+"/plugins";
    pluginManager.setPluginPaths(pluginPaths);


    const PluginSpecSet plugins = pluginManager.plugins();
    ExtensionSystem::PluginSpec *coreplugin = 0;
    foreach (ExtensionSystem::PluginSpec *spec, plugins) {
        if (spec->name() == QLatin1String(corePluginNameC)) {
            coreplugin = spec;
            break;
        }
    }
    if (!coreplugin) {
        QString nativePaths = QDir::toNativeSeparators(pluginPaths.join(QLatin1String(",")));
        const QString reason = QCoreApplication::translate("Application", "Couldn't find 'Core.pluginspec' in %1").arg(nativePaths);
        qDebug() << reason;
    //    return 1;
    }
    if (coreplugin->hasError()) {
        qDebug() << coreplugin->errorString();
    //    return 1;
    }

    pluginManager.loadPlugins();
    if (coreplugin->hasError()) {
        qDebug() << coreplugin->errorString();
    //    return 1;
    }

        QString titlePattern = tr("Memory $");
        ICore *core = ICore::instance();
        EditorManager* manager = EditorManager::instance();
        IEditor* editor = manager->openEditorWithContents(Core::Constants::K_DEFAULT_TEXT_EDITOR, &titlePattern);

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 10.11.2009, 17:34
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

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




Репутация:   2  


Гм... У меня ваш код без последних четрех строк отлично работает с QtCreator 1.2.1. На какой строчке у вас падает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 10.11.2009, 17:42
Сообщение #16





Гости








    


Цитата(frg10 @ 10.11.2009, 17:34) *
Гм... У меня ваш код без последних четрех строк отлично работает с QtCreator 1.2.1. На какой строчке у вас падает?

Вот на этой выпадает, чет со стилем не так раз на него ругается.
pluginManager.loadPlugins();

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 10.11.2009, 18:01
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

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




Репутация:   2  


Да, не получается у него стиль загрузить. Просто QtCreator запускается? Под какой системой сидите?
Попробуйте вставит вначале программы, после создания QApplication строчку:
qDebug() << qApp->style()->objectName();

Что выдаст?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_heiheshang_*_*
сообщение 10.11.2009, 18:23
Сообщение #18





Гости








    


Цитата(frg10 @ 10.11.2009, 18:01) *
Да, не получается у него стиль загрузить. Просто QtCreator запускается? Под какой системой сидите?
Попробуйте вставит вначале программы, после создания QApplication строчку:
qDebug() << qApp->style()->objectName();

Что выдаст?

Ни че не выдает хотя стоит QApplication::setStyle(new QWindowsStyle);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
frg10
  опции профиля:
сообщение 10.11.2009, 23:15
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 8.11.2009
Из: Ростов-на-Дону
Пользователь №: 1213

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




Репутация:   2  


Цитата(Гость_Гость_heiheshang_*_* @ 10.11.2009, 18:23) *
Ни че не выдает хотя стоит QApplication::setStyle(new QWindowsStyle);

Тогда нужно или вообще убрать принудительную установку стиля, или сделать вот так:
QWindowsStyle* windowsStyle = new QWindowsStyle;
windowsStyle->setObjectName("windows");
QApplication::setStyle(windowsStyle)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.11.2009, 3:47
Сообщение #20


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

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

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




Репутация:   94  


Стиль лучше устанавливать через фабрику:
QStyle *pStyle = QStyleFactory::create("windows");//Cleanlooks Plastique windowsxp
if (pStyle){
    QApplication::setStyle(pStyle);
    qApp->setPalette(pStyle->standardPalette());
}
и проверять указатель, т.к. стиля может не существовать на данной конкретной машине
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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