Изменение размера веб-страницы внутри сплиттера в qt - PullRequest
0 голосов
/ 18 мая 2018

Мой вопрос прост, но я изо всех сил пытался найти решение.У меня есть QMainWindow, показанное на изображении, построенном в QtCreator.

enter image description here

Я хочу загрузить html-страницу в QWidget csWindow, для этогоЯ поместил Qlabel label_pic, где я загружаю свою веб-страницу.Пока это код:

MainWindow::MainWindow(QWidget *parent, Project *project) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->project = project;

    QWebEngineView *view = new QWebEngineView(ui->label_pic);
    view->load(QUrl("http://localhost/myWeb.html"));

    ////works fine, for an image
    //QPixmap pix(":/img/imgs/someImage.png");
    //ui->label_pic->setPixmap(pix);

    //I also can load the web page in the QWidget csWindow but with the same result
    //QWebEngineView *view  = new QWebEngineView(ui->csWindow);
    //view->load(QUrl("http://localhost/myWebb.html"));

}

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

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

Заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Страница загружается нормально, но не помещается в соответствующее пространство

Это потому, что размер QWebEngineView неизвестен, пока не завершится загрузка, так что вам нужноподключиться к его сигналу loadFinished и изменить размер label_pic:

connect(view, &QWebEngineView::loadFinished, [this]() {this->ui->label_pic->resize(this->ui->csWindow->size());});

Я хочу изменить размер веб-страницы при перемещении разделителей

Затемтакже вам необходимо подключиться к сигналу QSplitter::splitterMoved от всех ваших сплиттеров и изменить размеры как csWindow, так и label_pic следующим образом:

connect(ui->splitter, &QSplitter::splitterMoved, [this]() { this->view->resize(this->ui->csWindow->size()); this->ui->label_pic->resize(this->ui->csWindow->size());});
connect(ui->splitter_2, &QSplitter::splitterMoved, [this]() { this->view->resize(this->ui->csWindow->size()); this->ui->label_pic->resize(this->ui->csWindow->size());});
connect(ui->splitter_3, &QSplitter::splitterMoved, [this]() { this->view->resize(this->ui->csWindow->size()); this->ui->label_pic->resize(this->ui->csWindow->size());});

и учтите, что это будет работать лучше, если вы установите макет для своего окна, либо изконструктор или добавление кода, например:

QGridLayout *layout = new QGridLayout;
layout->addWidget(ui->splitter_3);
this->ui->centralWidget->setLayout(layout);

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

...