如何创建获取当前视图选项卡(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.
我正在尝试使用 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.