Изменение размера веб-страницы внутри сплиттера в qt

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

введите описание изображения здесь

Я хочу загрузить 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

Решение

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

Это потому что размер 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);

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]