Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTextEdit
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
edwardoid
Разобравшись с autocomplete и подсветкой я хочу такого эффекта:
нумерацию строк слева как, например в Notepad++
это возможно?, как?
Litkevich Yuriy
посмотри исходники Qdevelop, может найдешь ответ.
ViGOur
Как вариант, смотри реализацию: Текстовый редактор JuffEd.
Litkevich Yuriy
Цитата(ViGOur @ 4.5.2008, 21:06) *
Как вариант, смотри реализацию: Текстовый редактор JuffEd.

edwardoid, на тех же скринах и твой любимый статус бар есть :)
edwardoid
Цитата(Litkevich Yuriy @ 4.5.2008, 18:10) *
Цитата(ViGOur @ 4.5.2008, 21:06) *
Как вариант, смотри реализацию: Текстовый редактор JuffEd.

edwardoid, на тех же скринах и твой любимый статус бар есть :)

Тема умерла, а проблема осталась. Не могу нигде найти рабочий код. Смотрел и это и PEditor, QDevelop. Кто-нибудь может кинуть класс от QTextEditor или с QТextEdit который имел бы нумерацию строк, а лучше и свертываемость кода? Пожалуйста, помогите.
Litkevich Yuriy
edwardoid, есть еще qPEditor
а вообще посмотри на QtApps в разделе Text Editors

еще можно QScintilla2 использовать
edwardoid
qPEditor даже экзамп не запускает, выдает Runtime error,
QScintilla2 вообще не понял как использовать...
Litkevich Yuriy
edwardoid, могу тебе дать свою, подправленную, сборку QScintilla и пример. Некоторое время назад сам ею заинтерисовался, но пока отложена в сторону.
edwardoid
Цитата(Litkevich Yuriy @ 22.1.2009, 0:24) *
edwardoid, могу тебе дать свою, подправленную, сборку QScintilla и пример. Некоторое время назад сам ею заинтерисовался, но пока отложена в сторону.

Дай плз, и объясни как этим пользоваться.
Litkevich Yuriy
1) вообщем скачиваешь мою версию QScintilla2, распаковываешь куда-нибудь (путь без пробелов). Читаешь README. (Я поменял структуру каталогов, зделал наподобии Qt. Ну и т.к. делал для себя там нет примеров для дизайнера и невсе инклюды подсветка C++ точно есть).
2) скачиваешь мой пример, проделываешь те же операции.
(собственно пример собран из двух, оригинального и местного)

Все!
trdm
Цитата(Litkevich Yuriy @ 21.1.2009, 23:36) *
1) вообщем скачиваешь мою версию QScintilla2, распаковываешь куда-нибудь (путь без пробелов). Читаешь README. (Я поменял структуру каталогов, зделал наподобии Qt. Ну и т.к. делал для себя там нет примеров для дизайнера и невсе инклюды подсветка C++ точно есть).
2) скачиваешь мой пример, проделываешь те же операции.
(собственно пример собран из двух, оригинального и местного)

Все!

А русский нормально поддерживается?
Litkevich Yuriy
Цитата(trdm @ 22.1.2009, 2:56) *
А русский нормально поддерживается?
писать точно можно
void*
edwardoid, вот и вот еще глянь, там уже готовый пример использования.
trdm, писать на русском можно, но вот из кодировок там доступны только Latin1 и UTF-8
Litkevich Yuriy
Цитата(void* @ 22.1.2009, 4:00) *
edwardoid, вот и вот еще глянь, там уже готовый пример использования.
Я как раз в QScintill'овский пример ваши кусочки и вставил.

Цитата(void* @ 22.1.2009, 4:00) *
там доступны только Latin1 и UTF-8
CP-1251 так же, а вообще должны быть доступны любые поддерживаемые Qt.
void*
Цитата(Litkevich Yuriy @ 22.1.2009, 1:09) *
CP-1251 так же, а вообще должны быть доступны любые поддерживаемые Qt.

а можешь подсказать где это настраивать программным путем, а то я что-то может не заметил?
я из всех подобных функций видел только setUtf8()
Litkevich Yuriy
void*, просто пишешь текст, в виндовозе, и сохраняешь, будет локальная кодировка (у меня CP/windows-1251).

чтобы работали разные кодировки используй кодек, в моем пимере его нужно повесить в двух местах на сохранение и на открытие файла:
см. void MainWindow::loadFile(const QString &fileName)
...
QTextStream in(&file);

in.setCodec(ЗдесьКодек);
...

для сохранения тоже самое.

При таком способе есть недостаток если пользователь изменил файл, не сохранил, и ему нужно отбразить в другой кодировке, то нужно будет перезагрузить файл и тогда изменения пропадут.
trdm
Цитата(void* @ 22.1.2009, 3:06) *
я из всех подобных функций видел только setUtf8()

Вот только она и позволяет набирать с клавы русскими буквами.
setUtf8(true); и пошел. А иначе никак...

А вообще у меня давно руки чешутся напрямую поработать со сцинтиллой.
тока там попотеть много прийдется...
edwardoid
Litkevich Yuriy, спасибо. Ваш пример скомпилился и нормально работает. Однако например если ваш же калсс попытаться добавить в QMdiArea, как например делается в MDI Example, то все компилится, НО! При запуске выдает ошибку, естественно dll-ка у меня присутствует в нужном каталоге.
Litkevich Yuriy
Цитата(edwardoid @ 23.1.2009, 18:52) *
при запуске выдает ошибку,
а что за ошибка-то? (пиши сразу)
void*
edwardoid, все правильно. Я давно уже писал об этой проблеме, единственное известное мне пока решение - наследоваться от QFrame и на нем уже показывать сам объект класса QsciScintilla. Здесь я уже давал ссылки на свою реализацию, она работает нормально и в MDI-приложении.
edwardoid
"Exemple.exe has stopped working" - вот такая ошибка.
Litkevich Yuriy
Цитата(edwardoid @ 23.1.2009, 21:29) *
"Exemple.exe has stopped working" - вот такая ошибка.
не информативно, попробуй отладочную версию (которая с консолью) может туда еще что-то выведится.
edwardoid
вот, что получил... больше никакой информации нет.
Litkevich Yuriy
edwardoid, можешь свой проект выложить? Я попробую с MinGW собрать.
Litkevich Yuriy
скачал, завтра/послезавтра гляну
void*
edwardoid, в каком режиме у тебя собрана QScintilla и само приложение?
edwardoid
в обоих собирал, в дебаге выдает вон ту ошибку что со скрином дал, а в релизе пщибку что выше.
void*
хм... странно что в релизе тоже вылетает, т.к. у меня тоже была проблема с вылетами, но это было только в винде и только в дебаге, в релизе все норм работало...
edwardoid
вон я саурс постнул скомпиль посмтори плз
Litkevich Yuriy
edwardoid, с компиляцией твоего проекта есть проблемы.
1) unitededitor.ui был включен в файл проекта дважды.
2) ui_unitededitor.h был включен в файл проекта, это автоматически создаваемый файл, его не надо включать.

3) в файле editwidget.h не правильно подключен файл вместо #include "eedit.h" использовались угловые скобки

Получилось у меня вот такое:
Нажмите для просмотра прикрепленного файла
только почему-то содержимое окна с периодичностью ~1 с. танцует на ~5 пикс. вверх-вниз.
т.е. зеленая панель увеличивается в размере, и соответственно толкает все то, что под ней.

собираются и запускаются без проблем обе версии (отладочная и релизная). Однако при закрытии релизной версии выдается ошибка
Нажмите для просмотра прикрепленного файла
edwardoid
Litkevich Yuriy
1) Файл проекта был сгенерирован Qt Creator-oм.
2) Этого не знал, спасибо.
3) исправил.

У вас можно дать новый файл? У меня появляется ошибка именно в этот момент.
З.Ы.
Почему прыгает все с таким интервалом я знаю, все потому что я забыл дать вам иконки и ресурсовый файл, с ресурсами все ок.
Litkevich Yuriy
Цитата(edwardoid @ 25.1.2009, 19:33) *
я забыл дать вам иконки и ресурсовый файл
иконки есть а вот файла ресурсов нет - выкладывай.

еще замечания:
1) главное окно ты зря без компоновщика делаешь.
2) Там еще какая-то кнопка невидимая была (postOutputBtn), я её немного переместил.
edwardoid
resource.qrc - ресурсы.
1) Всмысле без компоновщика? Я учусь пока, потому можно поподробнее?
2) Эта кнопка и должна быть невидимой, все ок.

А что насчет нового файла? Нумерация и свертывание кода есть?
Litkevich Yuriy
Цитата(edwardoid @ 25.1.2009, 20:06) *
Всмысле без компоновщика? Я учусь пока, потому можно поподробнее?
QLayout

Цитата(edwardoid @ 25.1.2009, 20:06) *
2) Эта кнопка и должна быть невидимой, все ок.
из-за неё будет оставатся пустое место с права, при использовании компоновщика. Я б ее перенес на панель инструментов, и если нужно, запрещал/разрешал.

с действием "action_New_file" какие-то проблемы, отладочная версия выгружается, а в релизной ошибка во время выполнения.

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

П.С. симпатично получилось.

---------
Залил сюда
в архиве лежит новый файл qscintilla.pri закинь его вместо старого (в сцинтиловский каталог). Сделал его использование проще, благодаря находке void*
А также не забудь попроавить путь в файле проекта, я его под себя менял.

В главном окне использован компоновщик (его невидно - нет красной рамки, т.к. в дизайнере предусмотрен у каждого виджета один компоновщик). И еще немного похулиганил - соеденил в дизайнере сигнал "action_Exit" действия "action_Exit" со слотом "close()" главного окна.
edwardoid
спасибо за это)
А понял почему новый файл в релизной версии не создается новый файл???откуда эта ошибка?
Litkevich Yuriy
Цитата(edwardoid @ 25.1.2009, 20:54) *
откуда эта ошибка?
нет не разбирался, пока некогда.
edwardoid
У мну все скомпилилось, и при закрытии нет ошибок, ошибка вылетает тогда, когда пытаюсь создать субокно в МДИ приложении. И ошибка вылетает независимо от варианта релиз или дебаг.
edwardoid
извините, что снова пишу, но люди помогите плз, сколько дней бьюсь никак не пойму. Ни это ни работу с QHttp..
Litkevich Yuriy
edwardoid, самы простой путь создать обертку. Т.е. сделать свой виджет, наследник от QWidget, а внем создать копоновщик (QLayout), в который поместить YSciTEW (это применительно к моему примеру редактора). И его использовать как субокно
edwardoid
не совсем понял, что ты имеешь ввиду. насколько понял:
#ifndef ESUBWINDOW_H
#define ESUBWINDOW_H

#include <QWidget>
#include <QLayout>
#include "eedit.h"

class ESubWindow : public QWidget
{
public:
    ESubWindow(QWidget* =0);
    ~ESubWindow();
    EEdit *edit;
private:
    //QLayout *layout;
};

#endif // ESUBWINDOW_H



#include "esubwindow.h"

ESubWindow::ESubWindow(QWidget* parent): QWidget(parent)
{
    //layout = new QLayout(this);
    edit = new EEdit(this);
    //layout->addChildWidget(edit);
}

ESubWindow::~ESubWindow()
{
    delete edit;
   // delete layout;
}


Класс EEdit один в один как твой YSciTEW, только имена поменял.

Пытаюсь добавить так:
ESubWindow *item=new ESubWindow(ui->mdiArea);
QMdiSubWindow* window = ui->mdiArea->addSubWindow(item);

Ошибка РОВНО получается та же самая...
edwardoid
итак!
Насколько я понял вся ошибка вот тут:

#if defined Q_WS_WIN
    //int font_id = QFontDatabase::addApplicationFont(":/res/fonts/COURI.TTF");
    //lexer->setFont(QFont(QFontDatabase::applicationFontFamilies(font_id).first()));
    #elif defined Q_WS_X11
    lexer->setFont(QFont("Monospace"));
    #endif


А именно то, что у меня в ресурс файле не было файла ":/res/fonts/COURI.TTF"
Потому сейчас проблема в том, как указать ему на шрифт, который точно есть в Виндовозе, но главное с прошлым справилсо. :clapping:
Litkevich Yuriy
Цитата(edwardoid @ 29.1.2009, 20:50) *
А именно то, что у меня в ресурс файле не было файла ":/res/fonts/COURI.TTF"
ну а ты его добавь
Litkevich Yuriy
тему разделил: Компиляция QScintilla под Линукс
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.