Wie man die QLayouts zu erweitern, richtig?
Meine Struktur ist wie folgt:
QWidget -QHBoxLayout -QLabel -QVBoxLayout -QLabel -QWebView
Möchte ich die HBoxLayout füllen Sie die Breite so groß die Behälter sein kann, aber gehen nicht mehr oder weniger. Allerdings möchte ich die QVBoxLayout zu erweitern, um die Größe der Inhalte in der vertikalen Richtung.
+-------------+------------------------------+ | FixedTitle: | Ausweitung auf Breite Titel + | |------------------------------+ | | + | | dies ist ein test, wraps bis+ | | die nächste Zeile + | | + | | + | | + | | bla bla bla + | | + | | + | | + | | es gibt keine vertikale scroll + | | bars hier + +-------------+------------------------------+
In diesem Beispiel, FixedTitle Breite ist der aber groß muss es sein, aber nicht die Größe immer. Ausbau, um die Breite der Titel füllt die verbleibenden horizontalen Platz.
Bisher habe ich:
this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
QHBoxLayout *layout = new QHBoxLayout;
this->setLayout(layout);
layout->addWidget(new QLabel(QString("FixedTitle")), 0, Qt::AlignTop);
QVBoxLayout *v_layout = new QVBoxLayout;
v_layout->setSizeConstraint(QLayout::SetNoConstraint);
layout->addLayout(v_layout);
v_layout ->addWidget(new QLabel(QString("Expanding to Width Title")), 1, Qt::AlignTop | Qt::AlignLeft);
QWebView *view = new QWebView();
QTextEdit text;
text.setPlainText(QSString("\nthis is a test which wraps to the next line\n\n\nbla bla bla\n\n\nthere are no vertical scroll bars here"));
view->setHtml(text.toHtml());
int width = view->page()->mainFrame()->contentsSize().width();
int height = view->page()->mainFrame()->contentsSize().height();
view->page()->setViewportSize(QSize(width, height));
view->resize(width, height);
view->setFixedSize(width, height);
v_layout->addWidget(view);
Gibt es zwei Probleme: 1. Es ignoriert die Breite des Containers und 2. Es immer noch nicht erhalten die Höhe der QWebView richtig.
Wie kann ich dieses Problem beheben?
- Erklären Sie Ihren Dimensionierung Ziel ein wenig klarer? Erste, was sizing wollen Sie passieren zwischen dem label und dem layout in der ersten horizontalen layout? Zweitens, welche Beziehung der Dimensionierung möchten Sie zwischen dem Etikett (textedit?) und webview in das vertikale layout? Sie werden versuchen, die webview niemals horizontale Scrollbalken?
- Ich fügte hinzu, ein wenig Bild, hilft das?
- Ja danke. Auch was ist der deal mit der QTextEdit. Sie erwähnt zwei QLabels.
- Ich aktualisiert, das mit dem Bild besser. Die QTextEdit gibt es nur text zu konvertieren in eine html-Seite.
- Letzte Frage. Zwischen den QTextEdit und die QWebView, wie Sie Sie haben wollen, sowohl auf die Größe bezogen auf den Inhalt? Ich bin klar auf die anderen Komponenten jetzt. Aber Wann sollte vertikalen Balken sichtbar?
- Die QTextEdit ist nie zum Layout Hinzugefügt, es ist einfach zu konvertieren Sie die Zeichenfolge in html. Die QWebView sollte nie Anzeige vertikaler scroll-Balken, so sollte das widget erweitern, um Platz für seine Größe. Ist das klar?
InformationsquelleAutor chacham15 | 2012-08-31
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist mein nehmen auf eine Antwort... und verzeihen Sie mir, aber seine geschrieben in PyQt.
Ich das Gefühl, dass Ihr sollten nicht denken so viel über die Größe des mit widget um den Inhalt der QWebView, sondern nur die Größe-Richtlinien, erweitern, deaktivieren Sie die Bildlaufleisten, verschieben und Größenanpassung, um welches layout dieses Containers Hinzugefügt. Es macht keinen Sinn, zu versuchen und manuell ändern Sie die Größe.
Und für ein Beispiel. Ich habe soeben eine QScrollArea und legen Sie die WebWidget in Sie, so dass Sie sehen können, das übergeordnete layout wird damit die Web-Ansicht zum wachsen so groß, wie er will, aber handle-überlauf mit scrollbars.
self.view.setFixedSize(self.view.page().mainFrame().contentsSize())
Kräfte, die Breite in einer bestimmten Größe (die größer als die Größe des Containers), d.h. dies bewirkt, dass horizontale Bildlaufleisten. Auch, sonderbar genug, die html-Seite mit weniger Inhalt nicht schrumpfen.QSize QWebView::sizeHint() const { return QSize(800, 600); // ####... }
was bedeutet, dass die Größe Hinweis nicht auf der Grundlage der tatsächlichen Größe des Inhalts ist. Nein, du hast Recht, dass der webview sonst die scroll-bars, aber ich möchte nicht auf dem Haupt-scroll-Fenster, um je eine horizontale Bildlaufleisten (vertikale scroll-Balken auf der qscrollarea ist in Ordnung).