LINUX.ORG.RU

QWebView минификация

 


0

1

Может я хочу многого или прохо читаю документацию, но не могу реализовать такое поведение:
хочу чтобы при изменении содержимого QWebView его габариты менялись на минимально достаточные для показа этого содержимого без прокрутки.
Ткните, пожалуйста, носом в доку или в код.

★★☆

Последнее исправление: Stahl (всего исправлений: 1)

afaik, из коробки нету. бери размеры обрамляющего контент DOM-элемента в js, и отправляй в C++, где уже меняй размеры webview

dib2 ★★★★★
()
Ответ на: комментарий от dib2
	QVariant h1 = page()->mainFrame()->evaluateJavaScript("document.body.scrollHeight;");
	QVariant h2 = page()->mainFrame()->evaluateJavaScript("document.body.offsetHeight;");
	QVariant h3 = page()->mainFrame()->evaluateJavaScript("document.documentElement.clientHeight;");
	QVariant w3 = page()->mainFrame()->evaluateJavaScript("document.documentElement.clientWidth;");
	QVariant h4 = page()->mainFrame()->evaluateJavaScript("document.documentElement.scrollHeight;");
	QVariant h5 = page()->mainFrame()->evaluateJavaScript("document.documentElement.offsetHeight;");

	qDebug() << "heights:" << h1.toInt() << h2.toInt() << h3.toInt() << h4.toInt() << h5.toInt() << w3.toInt();

Приводит к

heights: 0 0 30 0 0 100 

Все полученные значения бредовые и даже не рядом. Есть ещё идеи? Судя по перерытому гуглу — лучше у JS такие вещи не спрашивать — он сам не знает толком.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

лучше у JS такие вещи не спрашивать

кроме него собственно больше никто и не знает (ну кроме самого webkit)

в какой момент времени делались замеры выше, была ли заполнена и отображена страница на тот момент?

dib2 ★★★★★
()
Ответ на: комментарий от Stahl

Хотя соотношение 1:3 похоже на правду. Хм. может он не в пикселях возвращает?

Stahl ★★☆
() автор топика
Ответ на: комментарий от dib2

Да, конечно. Всё уже было отрисовано.

Stahl ★★☆
() автор топика
Ответ на: комментарий от dib2

heights: 0 0 30 0 0 100

Это после того, как я сказал resize (200,200) и увидел, что вьюха действительно 200 на 200.

Stahl ★★☆
() автор топика
Ответ на: комментарий от dib2

Слушай, я туп как валенок. Извини что нагрузил. Я не зная Qt такой ахинеи набыдлокодил, что ну его нафиг...
Моя ошибка. Можно у ЖС получить корректные данные.

Stahl ★★☆
() автор топика
Ответ на: комментарий от dib2

Нет, я всё таки не совсем дурак.
В общем JS выдаёт корректные числа тогда, когда прокрутки нет.
Если прокрутка есть, то числа кривые и почти отфонарные.
Такая вот статистика.

Stahl ★★☆
() автор топика

По моим скромным представлениям о DOM и CSS, того, чего ты хочешь, просто не может быть.

Например, вот у такого всегда будет горизонтальный скроллбар (я ни HTML, ни CSS не знаю, так что может несу бред):

<html>
<body>
<div style="margin-right:-100px;text-align:right">Hi there</div>
</body>
</html>
anonymous
()
Ответ на: комментарий от frozenix

qDebug() << webPage->sizeHint();

800x600. Это какой-то бред. Видимо дефолтное значение.

contentSize();

В каком классе ты это нашёл? Не вижу такого.

Stahl ★★☆
() автор топика
Ответ на: комментарий от frozenix

Э-э-э... Вроде работает. Предварительно говорю спасибо, но ищу подвох:)

Stahl ★★☆
() автор топика
Ответ на: комментарий от frozenix

Нет, просто на экране может быть несколько «подвижных» вебвьюшек и нефиг им занимать больше места, чем надо...

Stahl ★★☆
() автор топика
Ответ на: комментарий от frozenix

Слушай, раз ты разбираешься во всех этих странных штуках...
А нет ли какого сигнала, эмитируемого после того как отработает JS на странице? LoadFinished это не то.

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Не думаю, что вообще такой сигнал существует. JS может и вечно отрабатывать. Тут нужно встраивать свой JS скрипт, и из него уже вызывать JS страницы, а результат передавать в Qt.

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