Название: QScrollArea, наследование. Отправлено: Kero от Январь 20, 2012, 14:54 Здравствуйте.
Хочу изменить paintEvent в QScrollArea, чтобы в ее углу указывались ряд характеристик. Кто может подсказать, как это правильно сделать? Я понимаю, что надо наследоваться, но почему-то когда пишу в зоне viewport(), то текст не отображается или обрезается почему-то. Название: Re: QScrollArea, наследование. Отправлено: twp от Январь 20, 2012, 15:13 глянь пример в QtSDK\Examples\4.7\widgets\codeeditor\ как там отрисовываются номера строк
Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 20, 2012, 15:35 Это немного не то, что хотелось.
Надо, чтобы в ScrollArea отображался как обычно текст и + пара слов были фиксированы при прокручивании ползунка. На просторах интернета наткнулся на похожее обсуждение. Советуют "Переопредели painEvent в классе viewport'a. ". Кто-нибудь подскажет, как это сделать и поможет ли тут это? Название: Re: QScrollArea, наследование. Отправлено: twp от Январь 20, 2012, 15:38 отрисовка вьюпорта происходит непосредственно в painEvent ScrollArea, так что "Переопредели painEvent в классе viewport'a. " это бред
Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 20, 2012, 15:45 Это было взято отсюда.
http://forum.vingrad.ru/forum/s/382cf1a9ab933347e650a9d665184e7b/topic-242728.html Название: Re: QScrollArea, наследование. Отправлено: twp от Январь 20, 2012, 15:52 лучше читать ассистент
Цитировать void QAbstractScrollArea::paintEvent ( QPaintEvent * event ) [virtual protected] Reimplemented from QWidget::paintEvent(). This event handler can be reimplemented in a subclass to receive paint events (passed in event), for the viewport() widget. Note: If you open a painter, make sure to open it on the viewport(). Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 20, 2012, 16:00 Что я делаю тогда неправильно?
Код Получается, что текст mName не прокручивается, а пишется ровно столько строчек, сколько влезает. Кроме прочего, если увеличиваю размер шрифта для drawText, то он обрезается. Если добавить paint.fillRect(mRect,Qt::black); то будет закрашено небольшая полоска внизу ScrollArea. Название: Re: QScrollArea, наследование. Отправлено: twp от Январь 20, 2012, 16:13 что-то не вижу вызова
Код
Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 20, 2012, 16:23 Вроде добавил. Ничего не изменилось.
Код
Название: Re: QScrollArea, наследование. Отправлено: twp от Январь 20, 2012, 16:51 ну так а зачем устанавливать layout для ScrollArea? ей он не нужен, и по идее можно вообще обойтись без layout. Если же нужно скомпоновать несколько виджетов, то тогда да, например
Код
Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 23, 2012, 03:12 Проблема была в следующем: сам QScrollArea создавался в Qt Designer, поэтому ему автоматически ставился в соответствие scrollAreaWidgetContents. Затем QScrollArea преобразовался в свой класс, а WidgetContents оставался, который в дальнейшем, похоже, перекрывал widget созданный в конструкторе своего класса. Так как, если уменьшить размеры WidgetContents то данные видны, правда почему-то не прокручиваются. Сам WidgetContents почему-то удалить нельзя.
Создаю теперь новый ScrollArea динамически и добавляю его на форму. Но: 1) Почему-то не появляется полоса прокрутки. 2) ViewPort рисует только на свободной от элементов зоне. Как можно рисовать на всем пространстве ScrollArea, под созданными Label. Код
Название: Re: QScrollArea, наследование. Отправлено: Kero от Январь 23, 2012, 13:31 Все, думаю тему можно закрывать.
Описанная проблема, решилась другим способом. Просто отнаследовался от QLabel, который находился в стандартном QScrollArea, в нем дорисовал под текстом нужную информацию. В самой программе связал ScrollBar с позицией этой информации, чтобы информация сдвигалась и выглядело как на фиксированном месте. |