【问题标题】:How to get QWebEngine in QT Designer如何在 QT Designer 中获取 QWebEngine
【发布时间】:2021-11-03 21:36:16
【问题描述】:

我正在尝试制作一个为 youtube 视频添加字幕的程序,因为他们去年删除了社区字幕功能。我希望能够在 QT Designer 中使用 QWebEngine 小部件,但它不是主发行版的一部分,我找不到在 Windows 上安装它的步骤。

【问题讨论】:

    标签: qt qt-designer qtwebengine qwebengineview


    【解决方案1】:

    C++

    问题与post 类似,但不是 QChartView 你想要 QWebEngineView 所以我的回答会更简洁,我只会指出变化:

    推广

    1. 先在.pro中添加QT += webenginewidgets
    2. 将 QWidget 放置到设计中。
    3. 右键单击 QWidget 并选择提升到...
    4. 执行上述操作时,会出现一个菜单,在菜单中应在Promoted Class Name 中设置QWebEngineView,在Header 文件中设置QWebEngineView,然后按添加按钮,最后按promote。

    插件

    您必须使用您的 Qt 版本的分支克隆存储库,在示例中我将使用 Qt 5.15.2,然后您必须编译插件并安装它:

    git clone -b 5.15.2 https://code.qt.io/qt/qtwebengine.git
    cd qtwebengine/src/plugins/qwebengineview
    qmake .
    make
    make install
    

    如果您不想克隆项目,则可以从here 下载文件并运行 qmake、make 和 make install。


    Python

    似乎 OP 使用的是 python 而不是 C++,所以第一个解决方案有另一种方法,但第二种方法仍然有效,因为它安装了 QtDesigner 插件。考虑到上述情况,我将展示在 QtDesigner 中集成 QWebEngineView 的简单方法。

    推广

    您只需要使用步骤 2 到 4,但设置标题“PyQt5.QWebEngineWidgets”,例如您将获得以下信息:

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QWebEngineView" name="widget"/>
        </item>
        <item>
         <widget class="QPushButton" name="pushButton">
          <property name="text">
           <string>PushButton</string>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>800</width>
         <height>28</height>
        </rect>
       </property>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <customwidgets>
      <customwidget>
       <class>QWebEngineView</class>
       <extends>QWidget</extends>
       <header>PyQt5.QWebEngineWidgets</header>
       <container>1</container>
      </customwidget>
     </customwidgets>
     <resources/>
     <connections/>
    </ui>
    

    如果您要使用 PySide2,只需将其更改为 PySide2.QtWebEngineWidgets

    容器

    另一个更简单的选择是使用 QWidget 作为容器,然后使用布局来放置它。

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>800</width>
        <height>600</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QWidget" name="widget" native="true"/>
        </item>
        <item>
         <widget class="QPushButton" name="pushButton">
          <property name="text">
           <string>PushButton</string>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>800</width>
         <height>28</height>
        </rect>
       </property>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
    import os
    from pathlib import Path
    
    from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout
    from PyQt5.QtWebEngineWidgets import QWebEngineView
    from PyQt5.uic import loadUi
    
    CURRENT_DIRECTORY = Path(__file__).resolve().parent
    
    
    class Widget(QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
            filename = os.fspath(CURRENT_DIRECTORY / "gui.ui")
            loadUi(filename, self)
            lay = QVBoxLayout(self.widget)
            self.webview = QWebEngineView()
            lay.addWidget(self.webview)
    
    
    def main():
        import sys
    
        app = QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    
    
    if __name__ == "__main__":
        main()
    

    注意:在QtDesigner中提升一个widget不允许修改widget的属性,只有当.ui被加载到项目中时才能使用。

    【讨论】:

    • 我需要添加的 .pro 是什么?
    • @MTown 你的项目的.pro,或者你使用的是qbs还是CMakeLists.txt?
    • 我正在使用 Qt 设计器。当我从那里保存时,它是一个 .ui 文件。
    • @MTown 你用 C++ 或 python 创建了一个项目吗?您需要有一个项目,选项 1 需要它。如果您没有项目,请使用选项 2。
    • 我正在制作一个与 .ui 一起使用的 .py,但我不知道如何制作一个 .pro 文件。对不起,我对此很陌生。我也不知道如何使该 git 命令工作,并且我无法下载文件,尽管我可以复制文件的文本并在 notepad++ 中制作自己的文件(如果可以的话)。但是我应该把文件放在哪里?
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多