【问题标题】:Resizing web page inside a spliter in qt在 qt 中的拆分器内调整网页大小
【发布时间】:2018-10-29 01:15:11
【问题描述】:

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

我想在 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,启用属性缩放内容并且工作正常。现在,我想对网页做同样的事情。

提前致谢。

【问题讨论】:

  • 最好的办法是阅读 Qt 小部件系统中的布局如何工作。这正是它们的设计目的。

标签: c++ qt layout qwebengineview


【解决方案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);

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

【讨论】:

  • 感谢@Mohammad,我认为这可以解决问题,但我已经解决了使用 QOpenGLWidget 代替 QLabelWidget 并连接 QOpenGLWidget 的 resizeEvent() (覆盖 resizeEvent 并从那里发出 resize() 信号)使用 QWebEngineView 的调整大小槽。像这样,在 MainWindow 构造函数中:connect(ui->openGLWidget, SIGNAL(resized()), this, SLOT(resize()));
  • @oaurbanov,哦,太好了,你的工作方式不同了,现在这也可以作为参考
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多