crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> QScintilla, Подробнее
edwardoid
  опции профиля:
сообщение 24.2.2009, 17:50
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Имхо, каждый чел когда начинает писать GUI-приложения страется написать редактор. По ходу если пишешь на Qt то для нормального редактора в конце приходится использовать QScintilla.
А документация у него совсем никудышная и иерархия классов не оечьн понятна с первого взгляда. Если, вы, господа не против, давайте соберем тут решения на проблемы с которыми сталкиваешься, когда используешь QScintilla.

Проблема: Как модифицировать поведение аутокомплита? Т.е. как привязать появление окошка аутокомплита к какому-то хоткею или связке клавиш?

Я покопался в сырцах библиотеки, нигде ничего "Qt::Key" не нашел. И даже среди функций по названию ни одно вроде не подходило. Если не сложно покопайтесь и вы. Помогите, плз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 24.2.2009, 18:24
Сообщение #2


Программист-самоучка
***

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

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




Репутация:   3  


Цитата
Имхо, каждый чел когда начинает писать GUI-приложения страется написать редактор. По ходу если пишешь на Qt то для нормального редактора в конце приходится использовать QScintilla.
А документация у него совсем никудышная и иерархия классов не оечьн понятна с первого взгляда. Если, вы, господа не против, давайте соберем тут решения на проблемы с которыми сталкиваешься, когда используешь QScintilla.

идея хорошая, и самое главное может быть востребованной

Цитата
Проблема: Как модифицировать поведение аутокомплита? Т.е. как привязать появление окошка аутокомплита к какому-то хоткею или связке клавиш?

оно?
Цитата
virtual void autoCompleteFromAll ()
virtual void autoCompleteFromAPIs ()
virtual void autoCompleteFromDocument ()

т.к. это слоты, то можно вызывать по нажатию на любую клавишу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.2.2009, 18:32
Сообщение #3


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

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

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




Репутация:   94  


Цитата(void* @ 24.2.2009, 21:24) *
т.к. это слоты, то можно вызывать по нажатию на любую клавишу
ну да, правильно, ведь редактор наследник QWidget (прямой или косвенный), а каждому виджету можно задать комбинацию корячих клавиш или вовсе связать с ним действие (QAction)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 24.2.2009, 19:47
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


Не понял. Во первых, они виртуальные. Не должен ли я их сам описать? И какая разница между этими функциями?? Которая именно отображает окно аутокомплита?

Например при попытке :
showAutoComplete = new QAction(this);
    showAutoComplete->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Space));
    connect(showAutoComplete,SIGNAL(tiggered()),this,SLOT(autoCompleteFromAll()));    

}


showAutoComplet переменная типа QAction*.
Ничего не происходит.

UPD.
Перепробовал все сигналы от QAction, ничего не помогает ;(

Сообщение отредактировал edwardoid - 24.2.2009, 20:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 24.2.2009, 22:14
Сообщение #5


Программист-самоучка
***

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

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




Репутация:   3  


Цитата
Не понял. Во первых, они виртуальные. Не должен ли я их сам описать?

это лишь для возможности самому полностью переписать эти функции, если возникнет такая надобность. Можешь не обращать на это внимания.
Цитата
И какая разница между этими функциями?? Которая именно отображает окно аутокомплита?

Информация для автокомплита получается двумя способами. Первый - из так называемых API-файлов, т.е. предварительно составленных файлов со списком всех функций, макросов и т.п. Второй - берется во время выполнения программы из текущего текста QsciScintilla. Слот autoCompleteFromAll() получает информацию для автокомплита из обоих источников, т.е. лучше используй его.
Цитата
Например при попытке :
...
Ничего не происходит.

QAction здесь не причем. Во-первых у тебя опечатка здесь, сигнал называется triggered(), а не tiggered()
connect(showAutoComplete,SIGNAL(tiggered()),this,SLOT(autoCompleteFromAll()));

Во-вторых вот так у меня работает(хотя в твоем примере тоже должно работать, исправь только опечатку):
connect(new QShortcut(Qt::CTRL + Qt::Key_Space, this), SIGNAL(activated()), this, SLOT(autoCompleteFromAll()));


П.С. Если интересно, то вот примерно так загружаются API-файлы в моей IDE:
void TabWidget::loadAllAPIs() {
   QDir dir(QApplication::applicationDirPath());
   dir.cd("apis");
   QStringList lst = dir.entryList(QDir::Files);
   foreach(QString api_path, lst) {
      if(api_path!="." && api_path!="..") {
         api->load(dir.absolutePath() + "/" + api_path); //api - объект класса QsciAPIs
      }
   api->prepare();


А на реально используемые примеры API-файлов можешь взглянуть здесь.

Сообщение отредактировал void* - 24.2.2009, 22:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 24.2.2009, 22:37
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


твой код у меня скомпилился, но никак не реагирует на мои нажатия.... хотя есть, что комплитить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 24.2.2009, 22:47
Сообщение #7


Программист-самоучка
***

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

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




Репутация:   3  


Значит нет информации для автокомплита. Я проверил у себя в программе этот код и он работает. Но когда нечего показывать для автокомплита, то он ничего не отображает

Кстати ты случайно не забыл написать чтобы при создании редактора выполнялось это:
editor->setAutoCompletionSource(QsciScintilla::AcsAll); //по умолчанию стоит равным AcsNone, т.е. автокомплит отключен

?

Сообщение отредактировал void* - 24.2.2009, 22:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 25.2.2009, 12:27
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


this->setAutoCompletionSource(QsciScintilla::AcsAll);

У меня тоже было, но что-то не пашет. Даже когда в ауто комплите есть что показывать.


// Кстати как здесь http://www.forum.crossplatform.ru/index.ph...ost&p=15279
ты привязал api к QsciScintilla??? Я так понял, api это переменаня типа QsciAbstractAPIs??

Сообщение отредактировал edwardoid - 25.2.2009, 13:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.2.2009, 13:04
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(edwardoid @ 25.2.2009, 12:27) *
CODE
this->setAutoCompletionSource(QsciScintilla::AcsAll);

У меня тоже было, но что-то не пашет. Даже когда в ауто комплите есть что показывать.

Бррр!

edwardoid, прошу Вас, для таких малых кусков кода используйте тег code. А для больших кусков сочетание code and expand
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
edwardoid
  опции профиля:
сообщение 25.2.2009, 20:53
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 171
Регистрация: 1.5.2008
Из: Ереван, Армения
Пользователь №: 164

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




Репутация:   0  


void* есть идеи?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 15:39