Мой вопрос прост, но я изо всех сил пытался найти решение. У меня 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, включил свойство масштабируемого содержимого и работает нормально. Теперь я хочу сделать то же самое с веб-страницей.
Заранее спасибо.
Страница загружается нормально, но не помещается в соответствующее пространство
Это потому что размер 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);
и помните, что вы должны сделать все операторы подключения перед загрузкой представления.
Других решений пока нет …