2

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

有没有人有任何提示来解决这个问题?

4

2 回答 2

1

根据qtcentre.org 上的这篇文章,您应该能够通过设置大小策略来纠正该行为。

更新:

在根本不修改大小策略的情况下,aQWebView上的默认QHBoxLayout布局QWidget会导致 web 视图QWidget在大于的 at 大小范围内正确调整大小800x600(使用 QtCreator、C++、Windows 7、Qt 4.8.1)。

更新 2:

我做了一些挖掘,发现这个问题与您之前发布的包含相关要求的问题有关:)

以下代码似乎满足这些要求。唯一相关的位是我将 的水平和垂直大小策略更改QWebView为“扩展”。

主窗口.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;
}

主窗口.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:

在此处输入图像描述

于 2012-09-01T03:31:50.860 回答
1

我通过在扩展 QWebView 的自定义小部件中实现 heightForWidth 来使其工作

于 2012-09-01T21:52:28.890 回答