如何创建获取当前视图选项卡(QTabWidget)的子项(QWebEngineView)的方法?

How create method for get the child (QWebEngineView) of th curent view tab (QTabWidget)?

我正在尝试使用 QTabWidget(一个小浏览器和一个带有多个选项卡的文本编辑器,如记事本++)创建一些项目,但是当我尝试编辑小部件(QWebEngine 或 QTextEdit)的值时,我陷入了 2 个项目) 在 QTabWidget 内部。这是小浏览器项目的代码:

fp.h :

#ifndef FP_H
#define FP_H

#include <QMainWindow>
#include <QWebEngineView>
#include <QWidget>
#include <QLabel>

QT_BEGIN_NAMESPACE
namespace Ui { class fp; }
QT_END_NAMESPACE

class fp : public QMainWindow
{
    Q_OBJECT

public:
    fp(QWidget *parent = nullptr);
    ~fp();

public slots:
    void newtab();
    void deltab();
    void newpage();
    QWebEngineView *ap();
    int cui();
private:
    Ui::fp *ui;
    QWebEngineView *webnav;

};
#endif // FP_H

fp.cpp

#include "fp.h"
#include "ui_fp.h"

fp::fp(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::fp)
{
    ui->setupUi(this);
    ui->in_url->setText("https://google.com");

}

fp::~fp()
{
    delete ui;
}

void fp::newtab()
{
QWebEngineView *webnav = new QWebEngineView;
webnav->load(QUrl("https://google.com"));
webnav->setObjectName("webnav");
ui->in_url->setText("https://google.com");
ui->onglet->addTab(webnav,"Home");
}
int fp::cui()
{
    return ui->onglet->currentIndex();
}
QWebEngineView *fp::ap()
{
    return ui->onglet->currentWidget()->findChild<QWebEngineView *>("webnav");
}
void fp::deltab()
{
    ui->onglet->removeTab(cui());
}

void fp::newpage()
{
    QString use_url = ui->in_url->text();
    ap()->load(use_url);
}

还有 .ui Image of .ui in Qdesigner

我尝试使用方法“ap”工作,它应该 return 当前查看选项卡的 QWebEngineView 子级,但是当我调用插槽“newpage”(它当前使用“ap”方法)时,它就崩溃了应用程序。当我在 .ui 中的 QLineEdit 中输入新的 URL 时,会触发此插槽 (在此之前,我在插槽“newtab”中创建了一个带有 QWebEngineView 的新选项卡)

void fp::newtab()
{
QWebEngineView *webnav = new QWebEngineView;
webnav->load(QUrl("https://google.com"));
webnav->setObjectName("webnav");
ui->in_url->setText("https://google.com");
ui->onglet->addTab(webnav,"Home");
}

那么,获取 QTabWidget 的子窗口小部件的好方法有什么问题呢?如果是好的方法,应该修改什么才能使其有效?

QWebEngineView *fp::ap()
{
    return ui->onglet->currentWidget()->findChild<QWebEngineView *>("webnav");
}

试试这样的东西:

QWebEngineView *view = qobject_cast<QWebEngineView *>(
    this->ui->onglet->widget(0)
);

Note to put above somewhere in fp's methods (where you need the reference).

I could use ui->onglet->currentWidget(), but the difference is, that will not work once you have multiple tabs.