我想让QWebView看起来扩展到宽度和高度,这样理想情况下它就没有滚动条。有些网站可能有固定的宽度,不允许这样,但我并不关心这些。无论如何,我不能按照自己的意愿去做,因为QWebView实现了sizeHint,如下所示:
QSize QWebView::sizeHint() const
{
return QSize(800, 600); // ####...
}
这在许多级别上都是错误的。 1.它根本没有考虑实际网页的大小。 2.没有考虑到高度和宽度彼此相关。 (为了证明#2考虑包含在下一行的网页中的文本。)
作为我尝试做的一个简单修复(QResizingWebView扩展QWebView):
QSize QResizingWebView::sizeHint() const{
return this->page()->mainFrame()->contentsSize();
}
虽然这更接近结果,但它也有2个缺陷。 1.它没有考虑显示的宽度/高度之间的关系。 2. this->page()->mainFrame()->contentsSize()
与我从初步测试中得知的结果不准确(在很多情况下,它的高度已经超过它应该高,尽管这可能与#1有关)。
有没有人有任何解决此问题的提示?
答案 0 :(得分:1)
根据this post on qtcentre.org,您应该可以通过设置尺寸政策来纠正行为。
<强>更新强>
根本不修改尺寸政策,QWebView
上的默认QHBoxLayout
布局中的QWidget
会产生一个网页视图,该视图会在QWidget
尺寸内正确调整大小大于800x600
(使用QtCreator,C ++,Windows 7,Qt 4.8.1)。
更新2:
我做了一些挖掘,发现这个问题与您发布的a previous question相关,其中包含相关要求:)
以下代码似乎符合这些要求。唯一相关的是我将QWebView
的水平和垂直尺寸政策更改为&#34;展开&#34;。
<强> MainWindow.cpp:强>
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
<强> MainWindow.ui:强>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QWidget" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>587</width>
<height>442</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
<widget class="QWebView" name="webView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="url">
<url>
<string>http://www.google.ca/</string>
</url>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>QWebView</class>
<extends>QWidget</extends>
<header>QtWebKit/QWebView</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
更新3:
更新4:
给出评论中提供的URL。它显示如下。
主窗口为640x480:
主窗口为1024x768:
答案 1 :(得分:1)
我通过在扩展QWebView
的自定义小部件中实现heightForWidth来实现它