在qt中调整分隔符内的网页大小

时间:2018-05-18 14:50:28

标签: c++ qt layout qwebengineview

我的问题很简单,但我一直在努力寻找解决方案。我有QMainWindow在图像中显示,在QtCreator中构建。

enter image description here

我想在QWidget csWindow中加载一个html网页,因为我已经在我加载网页时放置了一个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 :(得分: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);

并记住在加载视图之前应该创建所有连接语句。