2012-08-31 39 views
2

我想讓QWebView看起來擴大到寬度和高度,所以理想情況下它沒有滾動條。有些網站可能有固定的寬度,但是我不關心這些。如何創建適當大小的QWebView?

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

這是在多個層面上不正確的:在任何情況下,我想是因爲QWebView實現sizeHint如下我不能這樣做。它根本不考慮實際網頁的大小。 2.它沒有考慮到高度和寬度是相互關聯的。 (爲了證明#2想想網頁中的文本換到下一行。)

作爲一個簡單的解決我這樣做(其中QResizingWebView擴展QWebView):

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

雖然這是更接近結果,它也有2個缺陷。 1.它沒有考慮顯示的寬度/高度之間的關係。 2. this->page()->mainFrame()->contentsSize()從我的初步測試中可以看出來不準確(在許多情況下,它已經返回比它應該大的高度,儘管這可能與#1有關)。

有沒有人有任何提示來解決這個問題?

回答

1

我得到了它在其中擴展QWebView自定義窗口小部件實現heightForWidth工作

1

根據this post on qtcentre.org,您應該能夠通過設置尺寸策略來更正此行爲。

更新:

沒有根本改變的大小政策,在默認QHBoxLayout佈局QWebViewQWidget結果,在尺寸比800x600更大的正常調整其大小QWidget內的Web視圖(使用QtCreator, C++,Windows 7,Qt 4.8.1)。

更新2:

我做了一些挖掘和發現,這個問題涉及到a previous question您發佈包含相關要求:)

下面的代碼似乎滿足這些要求。唯一相關的位是我將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。它顯示如下。

與主窗口在640×480:

enter image description here

與主窗口在1024x768:

enter image description here

+0

我不知道爲什麼這對他有效,它真的不應該有。 (它不適合我,我嘗試了很多次) – chacham15

+0

也許我不明白。如果我使用QWidget作爲主窗口並在水平佈局中放置QWebView,則QWebView將展開以填充主窗口,並且僅當網頁內容強制大於當前窗口的大小時才顯示滾動條。 –

+0

是的,HBoxLayout詢問QWidget的大小是多少。 sizeHint是回答這個問題的答案。 sizeHint表示,無論實際內容的大小如何,它都希望爲800x600。因此,QHBoxLayout將擴大到800x600以適應尺寸提示大小。然後,當實際渲染完成後,結果顯示內容遠大於提及的尺寸。因此,即使sizePolicy聲稱要展開,也會插入滾動條。 – chacham15

相關問題