如何创建正确大小的QWebView?

时间:2012-08-31 23:58:13

标签: c++ qt widget sizing

我想让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有关)。

有没有人有任何解决此问题的提示?

2 个答案:

答案 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:

enter image description here

主窗口为1024x768:

enter image description here

答案 1 :(得分:1)

我通过在扩展QWebView

的自定义小部件中实现heightForWidth来实现它