2010-09-30 5 views
2

J'ai un problème avec QGridLayout. Une ligne de ma disposition contient un élément (QProgressbar) qui est normalement caché. Quand il y a des progrès à signaler, j'appelle show. Le problème est que lorsque j'appelle show sur la barre QProgress, la ligne au-dessus de la ligne qui la contient sera légèrement redimensionnée en hauteur (1-3 px). Donc toute la disposition fait un petit "saut" qui a l'air laid.QGridlayout change la hauteur de la ligne

J'ai donné un minimalRowHeight à la ligne qui contient le QProgressbar qui est beaucoup plus grande que la hauteur de la QProgressbar mais la hauteur de la ligne augmentera toujours sur show().

J'ai joint une version très minimale de mon programme qui illustre le problème. Quelqu'un peut-il me donner un indice de ce qui se passe là-bas?

tête:

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QtGui/QMainWindow> 
#include <QLineEdit> 
#include <QtWebKit/QWebView> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    MainWindow(QWidget *parent = 0); 

private: 
    QLineEdit* input; 
    QWebView *webview; 

private slots: 
    void slotLoadButton(); 
}; 

#endif // MAINWINDOW_H 

Source: #include "mainwindow.h"

#include <QProgressBar> 
#include <QPushButton> 
#include <QGridLayout> 

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    QGridLayout *grid = new QGridLayout; 

    input = new QLineEdit; 

    QPushButton *loadButton = new QPushButton("load"); 
    connect(loadButton, SIGNAL(clicked()), 
      this, SLOT(slotLoadButton())); 

    webview = new QWebView; 
    QProgressBar *progress = new QProgressBar; 
    progress->setFixedHeight(25); 
    progress->hide(); 

    connect(webview, SIGNAL(loadStarted()), 
      progress, SLOT(show())); 

    connect(webview, SIGNAL(loadProgress(int)), 
      progress, SLOT(setValue(int))); 

    connect(webview, SIGNAL(loadFinished(bool)), 
      progress, SLOT(hide())); 

    grid->addWidget(input, 0, 0); 
    grid->addWidget(loadButton, 0, 1); 
    grid->addWidget(webview, 1, 0, 1, -1); 
    grid->setRowMinimumHeight(2, 35); 
    grid->addWidget(progress, 2, 1); 

    QWidget* widget = new QWidget; 
    widget->setLayout(grid); 
    setCentralWidget(widget); 
} 

void MainWindow::slotLoadButton() 
{ 
    QUrl url = input->text(); 
    webview->load(url); 
} 
+0

btw. Tous les conseils de débogage seraient également utiles pour moi. –

Répondre

0

Cela est probablement dû à l'espacement vertical et/ou des marges de la mise en page. Vous devriez essayer de jouer avec ces propriétés.

0

Cela ressemble à un bogue dans Qt. Essayez reporting it

Ceci est une solution de contournement:

//grid->addWidget(progress, 2, 1); 
QHBoxLayout *l = new QHBoxLayout; 
l->addWidget(progress); 
QWidget *w = new QWidget; 
w->setLayout(l); 
grid->addWidget(w, 2, 1); 
Questions connexes