QGridlayout меняет высоту строки - PullRequest
2 голосов
/ 30 сентября 2010

У меня проблема с QGridLayout. Одна строка моего макета содержит элемент (QProgressbar), который обычно скрыт. Когда есть некоторый прогресс, чтобы сообщить, я называю шоу на нем. Проблема в том, что когда я вызываю show на QProgressbar, строка над строкой, в которой она находится, будет немного изменена по высоте (1-3 пикселя). Таким образом, весь макет делает небольшой «прыжок», который выглядит некрасиво.

Я присвоил minimalRowHeight строке, содержащей QProgressbar, который намного больше, чем высота QProgressbar, но высота строки все равно увеличится в show ().

Я приложил очень минимальную версию моей программы, которая демонстрирует проблему. Кто-нибудь может дать мне подсказку, что там происходит?

Заголовок:

#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

Источник: #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);
}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2010

Это, вероятно, вызвано вертикальным интервалом и / или полями макета.Вы должны попробовать поиграть с этими свойствами.

0 голосов
/ 30 сентября 2010

Это похоже на ошибку в Qt.Попробуйте сообщить об этом

Это обходной путь:

//grid->addWidget(progress, 2, 1);
QHBoxLayout *l = new QHBoxLayout;
l->addWidget(progress);
QWidget *w = new QWidget;
w->setLayout(l);
grid->addWidget(w, 2, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...