在 QTabWidget 中嵌入 QWebEngineView 进程

Posted

技术标签:

【中文标题】在 QTabWidget 中嵌入 QWebEngineView 进程【英文标题】:Embed a QWebEngineView process inside QTabWidget 【发布时间】:2016-05-09 16:45:13 【问题描述】:

我正在尝试集成一个 QWebEngineView 小部件,该小部件在 QTabWidget 页面中作为单独的进程 (QProcess) 运行。到目前为止,QWebEngineView 进程正在正确启动,但它在单独的窗口中显示网页,而不是在 MainWindow 应用程序的 QTabWidget 中显示它。

这是被添加到 QTabWidget 的 Widget。

BrokersTerminal.h



class BrokersTerminal : public QWidget

    Q_OBJECT

  public:
    explicit BrokersTerminal(QWidget *parent = 0);
    ~BrokersTerminal();

    void startTerminal();

  public slots:
    void brokersTerminalStarted();

  private:
    Ui::BrokersTerminal *ui;
    QProcess *brokers_process;
    QString brokers_program_path;
    QStringList arguments;
;


BrokersTerminal.cpp

BrokersTerminal::BrokersTerminal(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::BrokersTerminal)

  ui->setupUi(this);
  brokers_process = new QProcess( this );
  brokers_program_path = QApplication::applicationFilePath();

  arguments << "--b";

  connect( brokers_process, &QProcess::started, this , &BrokersTerminal::brokersTerminalStarted );


BrokersTerminal::~BrokersTerminal()

  delete ui;


void BrokersTerminal::startTerminal()

  brokers_process->start( brokers_program_path, arguments );
  brokers_process->waitForStarted();


void BrokersTerminal::brokersTerminalStarted()

  qDebug() << "Brokers terminal started";

这是负责显示经纪人网站的 WebView 小部件。

BrokersWebWidget.h

class BrokersWebWidget : public QWidget

    Q_OBJECT

  public:
    explicit BrokersWebWidget(QWidget *parent = 0);
    ~BrokersWebWidget();

  private:
    Ui::BrokersWebWidget *ui;
    QUrl brokers_url;
    QWebEngineView *web_browser;
;

BrokersWebWidget.cpp

BrokersWebWidget::BrokersWebWidget(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::BrokersWebWidget)

  ui->setupUi(this);

  brokers_url = "https://siteofbrokersapi.com/";

  web_browser = new QWebEngineView( this );
  web_browser->load( brokers_url );


BrokersWebWidget::~BrokersWebWidget()

  delete ui;

现在这个 BrokersWebWidget 作为一个单独的进程正常启动,但它在一个单独的窗口中打开,但是如何将它添加到 BrokersTerminal 小部件中?

请让我知道任何可能的解决方案。谢谢。

【问题讨论】:

【参考方案1】:

您不能将在一个进程中运行的小部件嵌入到在另一个进程中运行的窗口中。 QWidgets 只能与在同一进程中的 GUI 线程中运行的小部件一起使用。

【讨论】:

嗯,是的,我理解你的观点,小部件需要在同一个 GUI 进程中才能集成到其中。所以我改变了我的设计计划,以确保所有与 GUI 相关的东西都在同一个 MainWindow 进程中完成,而繁重的计算则委托给后台进程。感谢您的建议。

以上是关于在 QTabWidget 中嵌入 QWebEngineView 进程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QTabWidget 中添加 QToolBar

Pyside 在 QtabWidget 中获取小部件

在 Qt 中,如何通过 qss 自定义如下 QTabWidget?

如何识别 QTabWidget 中当前选项卡何时发生变化?

在 QTabWidget 中更改选项卡大小

PyQt5 组件之QTabWidget