LINUX.ORG.RU

[QT4] QTextEdit - Как отловить моменты появления/исчезновения полосы прокрутки?


0

0

Здравствуйте!

Имеем объект QTextEdit. Когда пишем текст, и текста становится много, появляется движок прокрутки. Когда удаляем текст, и весь текст начинает умещаться в области QTextEdit, движок прокрутки исчезает.

Эти моменты и нужно отловить. Как?

Смотрю доку по QAbstractScrollArea, ничего похожего не вижу.


Можно использовать QScrollBar::maximum():

class Window(...) ... {
	Q_OBJECT
public:

	QTextEdit* e;
	int sbRange;

	Window(...) {
		e = new QTextEdit( this );
		sbRange = e->verticalScrollBar()->maximum();
		connect( e->verticalScrollBar(), SIGNAL( rangeChanged( int, int ) ), this, SLOT( onRangeChanged( int, int ) ) );
	}

private slots:
	void onRangeChanged( int, int max ) {
		if( !sbRange && max ) { 
// ON
			sbRange = max;
		} else if( sbRange && !max ) { 
// OFF
			sbRange = max;
		}
	}
}

summatus
()

По-человечески - никак. Можно внутри paintEvent'a (или keyPressEvent'a) дергать QAbstractScrollArea::verticalScrollBar() и смотреть, есть ли он там или нет.

shutty
()
Ответ на: комментарий от shutty

> По-человечески - никак. Можно внутри paintEvent'a (или keyPressEvent'a) дергать QAbstractScrollArea::verticalScrollBar() и смотреть, есть ли он там или нет.

Оказывается, можно по человечески. Надо воспользоваться фильтром событий.

EditorTextArea::EditorTextArea(QWidget *parent) : QTextEdit(parent)
{
// Устанавливается фильтр на событие показа или скрытия области прокрутки
this->verticalScrollBar()->installEventFilter(this);
}

...

bool EditorTextArea::eventFilter(QObject *o, QEvent *e)
{
// Обработка показа или скрытия области прокрутки редактора
if(o==this->verticalScrollBar())
if(e->type()==QEvent::Hide || e->type()==QEvent::Show)
{
qDebug() << "Scroll bar switch between hide and show";
}

return false; // Продолжать оработку событий дальше
}

xintrea
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.