Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: Red Devil от Май 07, 2008, 01:52



Название: Line number panel ?
Отправлено: Red Devil от Май 07, 2008, 01:52
Есть хорошего качества виджет для реализации line nubmer для текстовых редакторов ?
Те что видел в опен-соурс, мягко говоря далеко от идеала.


Название: Re: Line number panel ?
Отправлено: Mikhail от Май 07, 2008, 07:38
Есть хорошего качества виджет для реализации line nubmer для текстовых редакторов ?
Те что видел в опен-соурс, мягко говоря далеко от идеала.

Что ты понимаешь под качеством.
Какие редакторы смотрел.
Что не понравилось?


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 07, 2008, 20:11
edyuk какой-то, qtdevelop, kdevelop.

Под качеством я понимаю хорошо написанный код, без всяких там int a, float b, без лишних зависимостей и с документацией как и чего мне сделать что его интегрировать (соединить с виджетом редактором в котором текст редактируется).


Название: Re: Line number panel ?
Отправлено: Mikhail от Май 12, 2008, 13:08
edyuk какой-то, qtdevelop, kdevelop.

Под качеством я понимаю хорошо написанный код, без всяких там int a, float b, без лишних зависимостей и с документацией как и чего мне сделать что его интегрировать (соединить с виджетом редактором в котором текст редактируется).

Отдельный вряд ли найдешь.
Посмотри готовый редактор с панелью нумерации строк и панелью фолдинга.

http://www.anyqsoft.com/qPEditor?Lang=Rus


Название: Re: Line number panel ?
Отправлено: Вячеслав от Май 12, 2008, 22:52
еще сюды глянуть можно QScintillahttp://www.riverbankcomputing.co.uk/software/qscintilla/intro (http://www.riverbankcomputing.co.uk/software/qscintilla/intro)
Цитировать
As well as features found in standard text editing components, QScintilla includes features especially useful when editing and debugging source code. These include support for syntax styling, error indicators, code completion and call tips. The selection margin can contain markers like those used in debuggers to indicate breakpoints and the current line. Styling choices are more open than with many editors, allowing the use of proportional fonts, bold and italics, multiple foreground and background colours and multiple fonts.


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 18, 2008, 14:46
Спасибо.
В QpEditor вроде ничего, все достаточно просто в коде, попытаюсь его встроить к себе.
А вот в scintilla сходу не нашел в исходниках компонента, который реализует line number.


Название: Re: Line number panel ?
Отправлено: Mikhail от Май 18, 2008, 17:28
Спасибо.
В QpEditor вроде ничего, все достаточно просто в коде, попытаюсь его встроить к себе.
А вот в scintilla сходу не нашел в исходниках компонента, который реализует line number.

Зачем встраивать, бери готовый редактор qPEditor целиком и пользуйся.
Тем более если готовить .ui  с помощью QtDesigner, то можно использовать плагин qPEditor и просто положить его на форму.
Успехов.


Название: Re: Line number panel ?
Отправлено: Tonal от Май 20, 2008, 11:50
Если тебе именно нужен отдельный нумерователь строк, то чем тебя QHeaderView не устраивает?


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 22, 2008, 20:52
Ну если бы знать как его использовать ... есть у меня кое какие сомнения, в других приложениях я не видел чтобы его в качестве панели такой использовали.
Mikhail
Цитировать
Зачем встраивать, бери готовый редактор qPEditor целиком и пользуйся.
Нет, спасибо - готовый мне не к чему, у меня свой.


Название: Re: Line number panel ?
Отправлено: Tonal от Май 23, 2008, 08:17
В QTableView/QTableWidget же используют - чем плохо?. :-)
А работать с ним так же как и с любым наследником QAbstractView:
Установил модель, которая отдаёт в data по индексу номер строки, установил количество строк. Всё. :-)


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 24, 2008, 22:56
Новичек я пока что в Qt, про модель кое-какие теоритические сведенья имею, но не практические.
Попытаюсь сам сделать, если не получится создам темку.


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 26, 2008, 00:35
Книжечку читаю - вроде более понятно все стало.
И что я собственно хочу сказать. Ведь для модели данных нужны данные - т.е. в моем случае ему будут нужны номера всех строк в файле.
Если предположить, что одновременно может быть открыты десятки файлов - расход памяти будет достаточно большой на эти данные.
Что скажешь по этому поводу, Tonal ?


Название: Re: Line number panel ?
Отправлено: lit-uriy от Май 26, 2008, 01:38
я думаю основной расход памяти будет от содержимого файлов.


Название: Re: Line number panel ?
Отправлено: Tonal от Май 26, 2008, 10:23
Какой такой расход памяти? На что?
Рисуешь наследника QAbstractListModel. Переопределяешь метод data:
Код:
QVariant RowNumberModel::data(const QModelIndex& index, int role = Qt::DisplayRole) const {
  if (role == Qt::DisplayRole && index.isValid())
    return QVariant(QString::number(index.row() + 1));
  return QVariant();
}
Ну и остальное по мелочи. Память только на экземпляр самой модели и тратится.


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 31, 2008, 02:36
ни черта не понимаю.
Все примеры в книгах показывают как пределать модель к таблицам - как к QTextEdit ее прекприть я не понимаю ... даже не представляю какие функции нужно вызывать ... тем более что у QTextEdit нету setModel.
________

забираю свои слова назад - уже кое чего получилось. Буду разбиратся теперь с размерами.


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 31, 2008, 14:56
Каким образом можно уведомлять QHeaderView о перерисовке ?
У меня при скролле все номера строк остаются такие же как будто курсор все еще на первой строке.


Название: Re: Line number panel ?
Отправлено: Sergeich от Май 31, 2008, 15:22
А каким образом у QHeaderView можно шрифт настроить ? Я имею в виду размер и цвет надписей, которые в QHeaderView рисуются.
Либо QWidget::setFont и QWidget::setPalette, либо  QWidget::setStyleSheet
У меня при скролле все номера строк остаются такие же как будто курсор все еще на первой строке.
Можно заюзать сигнал valueChanged(int) от QTextEdit::verticalScrollBar ()


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 31, 2008, 15:28
Спасибо с шрифтом я лопухнулся конечно - сам бы мог додуматся через setFont.
По поводу valueChanged - я не очень. Т.е. сам принцип понятен, непонятно каким образом прокрутить текст в QHeaderView.

Еще у меня появилась проблема с соотвествием номеров строк самим строкам. Никак не удается подобрать их высоту, чтобы они друг к другу подходили. 17 пикселей ставлю для sectionSize - меньше, 18 - уже больше (чем строка в редакторе).


Название: Re: Line number panel ?
Отправлено: Mikhail от Май 31, 2008, 21:40
Спасибо с шрифтом я лопухнулся конечно - сам бы мог додуматся через setFont.
По поводу valueChanged - я не очень. Т.е. сам принцип понятен, непонятно каким образом прокрутить текст в QHeaderView.

Еще у меня появилась проблема с соотвествием номеров строк самим строкам. Никак не удается подобрать их высоту, чтобы они друг к другу подходили. 17 пикселей ставлю для sectionSize - меньше, 18 - уже больше (чем строка в редакторе).

А что будешь делать, когда QTextEdit::LineWrapMode будет не QTextEdit::WidgetWidth, а не QTextEdit::NoWrap.
Как тогда будешь подбирать sectionSize?
По моему это тупиковый путь. 


Название: Re: Line number panel ?
Отправлено: Red Devil от Май 31, 2008, 22:41
ну если textHeight это будет высота строки, то
2* textHeight наверное - а как еще ?
другое дело что я никогда не пользуюсь этой штукой и всегда ее отключаю - поэтому о ней не думал.


Название: Re: Line number panel ?
Отправлено: Red Devil от Июнь 11, 2008, 23:08
Хочу только сказать, что все получилось сделать по алгоритму Mikhail, я его только разумеется под свои требования подогнал.
Оказалось действительно очень просто.
Возможно позже, будет время доработаю свои классы до универсальности  и выложу, если конечно кому-то это будет нужно.