2

理想的にはスクロールバーがないように、QWebView を幅と高さに拡大して表示したいと考えています。一部の Web サイトでは幅が固定されていて、これが許可されていない場合がありますが、私はそれらに関心がありません。いずれにせよ、 QWebView は次のように sizeHint を実装しているため、思い通りにはできません。

QSize QWebView::sizeHint() const
{
    return QSize(800, 600); // ####...
}

これは多くのレベルで正しくありません。1.実際のWebページのサイズはまったく考慮されていません。2.高さと幅が互いに関連していることは考慮されていません。(#2 を証明するために、次の行に折り返される Web ページ内のテキストについて考えてみてください。)

私がやろうとした簡単な修正として(QResizingWebViewがQWebViewを拡張する場所):

QSize QResizingWebView::sizeHint() const{
    return this->page()->mainFrame()->contentsSize();
}

これは結果に近いですが、2 つの欠点もあります。1. 表示される幅と高さの関係を考慮していません。2.this->page()->mainFrame()->contentsSize()予備テストでわかったことは不正確です (#1 に関連している可能性がありますが、多くの場合、必要以上の高さを返しました)。

これを修正するためのヒントはありますか?

4

2 に答える 2

1

QWebViewを拡張したカスタムウィジェットにheightForWidthを実装することで機能しました

于 2012-09-01T21:52:28.890 に答える
1

qtcentre.org のこの投稿によると、サイズ ポリシーを設定することで動作を修正できるはずです。

アップデート:

サイズ ポリシーをまったく変更しなくても、QWebViewa のデフォルトQHBoxLayoutレイアウトQWidgetの Web ビューは、QWidgetより大きなサイズ800x600(QtCreator、C++、Windows 7、Qt 4.8.1 を使用) 内で適切にサイズ変更されます。

更新 2:

掘り下げたところ、この質問は、関連する要件を含む以前に投稿した質問に関連していることがわかりました:)

次のコードは、これらの要件を満たしているようです。関連する唯一のビットは、の水平方向と垂直方向のサイズ ポリシーQWebViewを「エキスパンド」に変更したことです。

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 の場合:

ここに画像の説明を入力

于 2012-09-01T03:31:50.860 に答える