覆盖 mousePressEvent 后 Qt Widget 调整大小

Posted

技术标签:

【中文标题】覆盖 mousePressEvent 后 Qt Widget 调整大小【英文标题】:Qt Widget resizing after overwriting the mousePressEvent 【发布时间】:2019-07-13 12:05:57 【问题描述】:

我正在尝试在 QtTreeView 小部件中实现上下文菜单。使用建议 Why mouseMoveEvent does nothing in PyQt5我已经创建了QTreeView的子类:

class TreeView(QTreeView):
def mousePressEvent(self, event):
    if event.type() == QEvent.MouseButtonPress:
        if event.button() == Qt.LeftButton:
            print( "Left click")
        elif event.button() == Qt.RightButton:
            print( "Right click")
        elif event.button() == Qt.MiddleButton:
            print( "Middle click")
    super(TreeView, self).mousePressEvent(event)

我将覆盖 QtTreeView(我在 Qt Designer 中设计的)如下:

self.dockWidget.treeView = TreeView(self.dockWidget.treeView)

这有效并允许在 TreeView 中捕获 mousePressEvents,但它会更改 TreeView 中内容的大小:

什么时候应该是这样的:

我已尝试设置 SizePolicy:

self.dockWidget.treeView.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)

但这并没有什么不同。我正在寻找一种方法来防止它改变大小或在它改变后将它恢复到原来的大小。

Reprex - 3 个文件:

main.py

from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, 
QListWidget,QTextEdit,QTreeView, QSizePolicy
from PyQt5.QtGui import QIcon, QStandardItemModel
from PyQt5.QtCore import Qt, QEvent
import sys

from utility_core_dockwidget import UtilityDockWidget



class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        title= "Dockable Application"
        top=400
        left=400
        width=600
        height= 500

        icon = "icon.png"

        self.setWindowTitle(title)
        self.setGeometry(top,left,width,height)
        self.setWindowIcon(QIcon("icon.png"))

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.dockAble()
        self.populateTreeView()

    def dockAble(self):
        self.dock = UtilityDockWidget()
        self.dock.treeView= TreeView(self.dock.treeView) #overwriting the treeview with the custom class causes the display issues
        self.addDockWidget(Qt.RightDockWidgetArea,self.dock)
        self.dock.treeView.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)

    def populateTreeView(self):
        print("here")
        model = self.createTreeViewLayerModel(self.dock.treeView)
        self.dock.treeView.setModel(model)

        for i in range (1,10):
            layerName= f"LayerName i"
            visibility = "Visible"
            layerId = i
            self.addTreeViewItem(model, layerName, visibility, layerId)

    def createTreeViewLayerModel(self,parent):
        model = QStandardItemModel(0, 3, parent)
        model.setHeaderData(0, Qt.Horizontal, "Layer Name")
        model.setHeaderData(1, Qt.Horizontal, "Visibility")
        model.setHeaderData(2, Qt.Horizontal, "Layer ID")

        return model

    def addTreeViewItem(self,model, layerName, visibility,layerId):
        model.insertRow(0)
        model.setData(model.index(0, 0), layerName)
        model.setData(model.index(0, 1), visibility)
        model.setData(model.index(0, 2), layerId)


class TreeView(QTreeView):
    def mousePressEvent(self, event):
        if event.type() == QEvent.MouseButtonPress:
            if event.button() == Qt.LeftButton:
                print( "Left click")
            elif event.button() == Qt.RightButton:
                print( "Right click")
            elif event.button() == Qt.MiddleButton:
                print( "Middle click")
        super(TreeView, self).mousePressEvent(event)

app = QApplication(sys.argv)
window=Window()
window.show()
app.exec()

utility_core_dockwidget.py:

import os

from PyQt5 import uic, QtWidgets, QtGui
from PyQt5.QtCore import pyqtSignal, Qt


FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'utility_core_dockwidget_base.ui'))


class UtilityDockWidget(QtWidgets.QDockWidget, FORM_CLASS):

    closingPlugin = pyqtSignal()

    def __init__(self, parent=None):
        """Constructor."""
        super(UtilityDockWidget, self).__init__(parent)
        self.setupUi(self)

    def closeEvent(self, event):
        self.closingPlugin.emit()
        event.accept()

utility_core_dockwidget_base.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>utilityDockWidgetBase</class>
 <widget class="QDockWidget" name="utilityDockWidgetBase">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>660</width>
    <height>807</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Utility</string>
  </property>
  <widget class="QWidget" name="dockWidgetContents">
   <layout class="QHBoxLayout" name="horizontalLayout_7">
    <item>
     <widget class="QTabWidget" name="tabWidget_2">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="minimumSize">
       <size>
        <width>200</width>
        <height>500</height>
       </size>
      </property>
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QWidget" name="tab_5">
       <attribute name="title">
        <string>Layer Source Changer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_7">
        <item>
         <layout class="QGridLayout" name="gridLayout_2">
          <property name="topMargin">
           <number>6</number>
          </property>
          <item row="1" column="0">
           <widget class="QLabel" name="label_8">
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source List</string>
            </property>
           </widget>
          </item>
          <item row="0" column="1" colspan="2">
           <widget class="QLineEdit" name="searchBar">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QComboBox" name="layerSourceList">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>250</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <family>MS Shell Dlg 2</family>
             </font>
            </property>
            <property name="editable">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <widget class="QPushButton" name="browseNewSource">
            <property name="maximumSize">
             <size>
              <width>35</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>...</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_9">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>50</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="autoFillBackground">
             <bool>false</bool>
            </property>
            <property name="text">
             <string>Search</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_8">
          <item>
           <widget class="QPushButton" name="refreshComboBox">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>75</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Refresh Sources</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QCheckBox" name="onlyVisibleCheckbox">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
             <string>Only Visible Layers</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QGridLayout" name="gridLayout_4">
          <property name="topMargin">
           <number>10</number>
          </property>
          <item row="1" column="0">
           <widget class="QPushButton" name="updateSelectedButton">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>100</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Update Selected</string>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QPushButton" name="updateAllButton">
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="toolTip">
             <string>Update all the layers with sources found in Source List</string>
            </property>
            <property name="text">
             <string>Update All</string>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <spacer name="horizontalSpacer_5">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeType">
             <enum>QSizePolicy::Expanding</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
          <item row="2" column="0">
           <widget class="QLabel" name="sourceInformationLabel">
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source Information</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_10">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="toolTip">
             <string>Update to the latest version</string>
            </property>
            <property name="text">
             <string>Automatic Options</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <widget class="QTreeView" name="treeView">
          <property name="sizePolicy">
           <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>0</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>16777215</height>
           </size>
          </property>
          <property name="styleSheet">
           <string notr="true">selection-color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(0, 169, 255, 147), stop:0.497326 rgba(0, 0, 0, 147), stop:1 rgba(0, 169, 255, 147));</string>
          </property>
          <property name="rootIsDecorated">
           <bool>false</bool>
          </property>
          <property name="sortingEnabled">
           <bool>true</bool>
          </property>
          <property name="animated">
           <bool>true</bool>
          </property>
          <attribute name="headerCascadingSectionResizes">
           <bool>true</bool>
          </attribute>
          <attribute name="headerDefaultSectionSize">
           <number>200</number>
          </attribute>
          <attribute name="headerShowSortIndicator" stdset="0">
           <bool>true</bool>
          </attribute>
         </widget>
        </item>
        <item>
         <widget class="QLabel" name="label_11">
          <property name="font">
           <font>
            <weight>75</weight>
            <bold>true</bold>
           </font>
          </property>
          <property name="text">
           <string>Log</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QTextEdit" name="textEdit"/>
        </item>
        <item>
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
           </size>
          </property>
         </spacer>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

【问题讨论】:

@eyllanesc 我创建了一个代表。它在 3 个文件中。我该如何提供? edit your question 并添加到那里。 【参考方案1】:

您假设以下代码:

self.dockWidget.treeView = TreeView(self.dockWidget.treeView)

正在替换 Qt Designer 创建的 QTreeView,因为不,您只是在创建另一个 QTreeView,它是原始 QTreeView 的子级。

你的逻辑类似于:

x = 10
y = x
x = 100

你认为它的 y 值为 100 但显然不是。


在这种情况下,解决方案是推广小部件,有关更多信息,请查看以下内容:

Using Custom Widgets with Qt Designer 所以答案: https://***.com/a/47273625 https://***.com/a/46671439 https://***.com/a/53504994 https://***.com/a/53545128 https://***.com/a/53926554

考虑到您的文件必须具有以下结构:

├── main.py
├── treeview.py
├── utility_core_dockwidget_base.ui
└── utility_core_dockwidget.py

ma​​in.py

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QListWidget, QTextEdit, QTreeView,QSizePolicy

from utility_core_dockwidget import UtilityDockWidget


class Window(QMainWindow):
    def __init__(self):
        super().__init__()

        title = "Dockable Application"
        top, left, width, height = 400, 400, 600, 500

        icon = "icon.png"

        self.setWindowTitle(title)
        self.setGeometry(top, left, width, height)
        self.setWindowIcon(QIcon("icon.png"))

        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.dockAble()
        self.populateTreeView()

    def dockAble(self):
        self.dock = UtilityDockWidget()
        self.addDockWidget(Qt.RightDockWidgetArea, self.dock)
        self.dock.treeView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    def populateTreeView(self):
        print("here")
        model = self.createTreeViewLayerModel(self.dock.treeView)
        self.dock.treeView.setModel(model)

        for i in range(1, 10):
            layerName = f"LayerName i"
            visibility = "Visible"
            layerId = i
            self.addTreeViewItem(model, layerName, visibility, layerId)

    def createTreeViewLayerModel(self, parent):
        model = QStandardItemModel(0, 3, parent)
        model.setHeaderData(0, Qt.Horizontal, "Layer Name")
        model.setHeaderData(1, Qt.Horizontal, "Visibility")
        model.setHeaderData(2, Qt.Horizontal, "Layer ID")

        return model

    def addTreeViewItem(self, model, layerName, visibility, layerId):
        model.insertRow(0)
        model.setData(model.index(0, 0), layerName)
        model.setData(model.index(0, 1), visibility)
        model.setData(model.index(0, 2), layerId)


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec())

treeview.py

from PyQt5 import QtCore, QtWidgets


class TreeView(QtWidgets.QTreeView):
    def mousePressEvent(self, event):
        if event.type() == QtCore.QEvent.MouseButtonPress:
            if event.button() == QtCore.Qt.LeftButton:
                print("Left click")
            elif event.button() == QtCore.Qt.RightButton:
                print("Right click")
            elif event.button() == QtCore.Qt.MiddleButton:
                print("Middle click")
        super(TreeView, self).mousePressEvent(event)

utility_core_dockwidget_base.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>utilityDockWidgetBase</class>
 <widget class="QDockWidget" name="utilityDockWidgetBase">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>660</width>
    <height>807</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Utility</string>
  </property>
  <widget class="QWidget" name="dockWidgetContents">
   <layout class="QHBoxLayout" name="horizontalLayout_7">
    <item>
     <widget class="QTabWidget" name="tabWidget_2">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="minimumSize">
       <size>
        <width>200</width>
        <height>500</height>
       </size>
      </property>
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QWidget" name="tab_5">
       <attribute name="title">
        <string>Layer Source Changer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_7">
        <item>
         <layout class="QGridLayout" name="gridLayout_2">
          <property name="topMargin">
           <number>6</number>
          </property>
          <item row="1" column="0">
           <widget class="QLabel" name="label_8">
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source List</string>
            </property>
           </widget>
          </item>
          <item row="0" column="1" colspan="2">
           <widget class="QLineEdit" name="searchBar">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QComboBox" name="layerSourceList">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>250</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>10000</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <family>MS Shell Dlg 2</family>
             </font>
            </property>
            <property name="editable">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <widget class="QPushButton" name="browseNewSource">
            <property name="maximumSize">
             <size>
              <width>35</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>...</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_9">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>50</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="autoFillBackground">
             <bool>false</bool>
            </property>
            <property name="text">
             <string>Search</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_8">
          <item>
           <widget class="QPushButton" name="refreshComboBox">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>75</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Refresh Sources</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QCheckBox" name="onlyVisibleCheckbox">
            <property name="layoutDirection">
             <enum>Qt::LeftToRight</enum>
            </property>
            <property name="text">
             <string>Only Visible Layers</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <layout class="QGridLayout" name="gridLayout_4">
          <property name="topMargin">
           <number>10</number>
          </property>
          <item row="1" column="0">
           <widget class="QPushButton" name="updateSelectedButton">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>100</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="text">
             <string>Update Selected</string>
            </property>
           </widget>
          </item>
          <item row="1" column="1">
           <widget class="QPushButton" name="updateAllButton">
            <property name="minimumSize">
             <size>
              <width>110</width>
              <height>0</height>
             </size>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="toolTip">
             <string>Update all the layers with sources found in Source List</string>
            </property>
            <property name="text">
             <string>Update All</string>
            </property>
           </widget>
          </item>
          <item row="1" column="2">
           <spacer name="horizontalSpacer_5">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeType">
             <enum>QSizePolicy::Expanding</enum>
            </property>
            <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
             </size>
            </property>
           </spacer>
          </item>
          <item row="2" column="0">
           <widget class="QLabel" name="sourceInformationLabel">
            <property name="maximumSize">
             <size>
              <width>120</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="text">
             <string>Source Information</string>
            </property>
           </widget>
          </item>
          <item row="0" column="0">
           <widget class="QLabel" name="label_10">
            <property name="sizePolicy">
             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
            <property name="maximumSize">
             <size>
              <width>110</width>
              <height>16777215</height>
             </size>
            </property>
            <property name="font">
             <font>
              <weight>75</weight>
              <bold>true</bold>
             </font>
            </property>
            <property name="toolTip">
             <string>Update to the latest version</string>
            </property>
            <property name="text">
             <string>Automatic Options</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item>
         <widget class="TreeView" name="treeView">
          <property name="sizePolicy">
           <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="minimumSize">
           <size>
            <width>0</width>
            <height>0</height>
           </size>
          </property>
          <property name="maximumSize">
           <size>
            <width>16777215</width>
            <height>16777215</height>
           </size>
          </property>
          <property name="styleSheet">
           <string notr="true">selection-color: qradialgradient(spread:repeat, cx:0.5, cy:0.5, radius:0.077, fx:0.5, fy:0.5, stop:0 rgba(0, 169, 255, 147), stop:0.497326 rgba(0, 0, 0, 147), stop:1 rgba(0, 169, 255, 147));</string>
          </property>
          <property name="rootIsDecorated">
           <bool>false</bool>
          </property>
          <property name="sortingEnabled">
           <bool>true</bool>
          </property>
          <property name="animated">
           <bool>true</bool>
          </property>
          <attribute name="headerCascadingSectionResizes">
           <bool>true</bool>
          </attribute>
          <attribute name="headerDefaultSectionSize">
           <number>200</number>
          </attribute>
          <attribute name="headerShowSortIndicator" stdset="0">
           <bool>true</bool>
          </attribute>
         </widget>
        </item>
        <item>
         <widget class="QLabel" name="label_11">
          <property name="font">
           <font>
            <weight>75</weight>
            <bold>true</bold>
           </font>
          </property>
          <property name="text">
           <string>Log</string>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QTextEdit" name="textEdit"/>
        </item>
        <item>
         <spacer name="verticalSpacer_4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
            <height>40</height>
           </size>
          </property>
         </spacer>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <customwidgets>
  <customwidget>
   <class>TreeView</class>
   <extends>QTreeView</extends>
   <header>treeview.h</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

获取以下信息:

【讨论】:

我让它与您发布的最少代码一起工作,但是当我尝试在完整的 dockwidget 中重现它时,它找不到 mytreeview.py(ModuleNotFoundError:没有名为“mytreeview”的模块)。有没有办法指定文件的路径? @Tim 没有minimal reproducible example 我不可能帮你 @Tim 我使用了从您的代码中推导出来的结构。你的真实结构是什么? dockwidget 是 QGIS 插件的一部分。就结构而言,它与您在代码中提供的结构相同。我将 mytreeview.py 放置在实用程序_core_dockwidget_base.ui 和实用程序_core_dockwidget.py 所在的插件文件夹的根目录中。您提供的代码适用于最小的可重现示例,它只是没有在主程序中找到文件 @Tim 好吧,我不使用 QGIS,所以它不能帮助你,检查我解释路径是如何建立的其他答案,可能一种解决方案是在 main .py 中使用 sys.path.append("/path/of/treeview.py")

以上是关于覆盖 mousePressEvent 后 Qt Widget 调整大小的主要内容,如果未能解决你的问题,请参考以下文章

被 Qt 中的 doubleclickevent 和 mousepressevent 弄糊涂了

如何在 PyQt 中为 Qt-Designer 小部件实现 MousePressEvent

mousePressEvent 没有正确绑定?

100分求助,Qt继承自QGraphicsItem的控件响应不了mousePressEvent事件怎么办?

即使拦截鼠标事件,Qt 窗口也会移动

事件(QEvent*)与 mousePressEvent(QMouseEvent *)冲突?