Имеется форма с QGraphicsView, QToolBox, QTextBrowser
QGraphicsView и QToolBox расположены в горизонтально лейоуте,
этот лейоут и QTextBrowser в вертикальном лейоуте.
![](http://geo-64.ru/uploads/1350899649_skrin.png)
Пытаюсь создать элемент в правом нижнем углу (отмечен стрелкой на скриншоте) QGraphicsView, потянув мышкой за который можно было-бы одновременно изменять размеры всех трех виджетов в пределах их мин/макс размеров.
Форму создавал в Designer-ре, компилируется UIC в момент инициализации.
Думал сначала создать QGraphicsItem, но подумал что потом этот класс может пригодиться для других виджетов.
Подскажите как лучше реализовать? Вот я пробовал разместить QPushButton, у которого родитель - QGraphicsView, но при вызове show() ни чего не отобразилось…
#класс для изменения границ виджетов /// class WidgetResizer(QtGui.QPushButton): # при инициализации передаем ему родителя (на нем он будет размещаться), # Top -> bool сверху - 1, иначе снизу (размещение) # Left -> bool слева - 1, иначе справа (размещение) # neighWidgets - список соседних виджетов, размеры которых будут тоже меняться. def __init__(self, parent, top, left, neighWidgets): QtGui.QPushButton.__init__(self, parent) self.top = bool(top) self.left = bool(left) self.neighWidgets = neighWidgets self.maxX = self.parent().width() self.maxY = self.parent().height() self.setGeometry(150, 150, 24, 24) self.setIcon(QIcon(u":/ico/anchor_4362.png")) self.setIconSize(QSize(16, 16)) self.setFlat(True) self.setMinimumSize(QSize(24, 24)) self.setMaximumSize(QSize(24, 24))
здесь при инициализации окна создаем экземпляр WidgetResizer:
class MainWindow( QtGui.QMainWindow ): def setupUi(self, parent=None): #инициализация виджета QtGui.QWidget.__init__(self, parent) #загружаем данные из формы UI uiClass, qtBaseClass = uic.loadUiType("mainwindow.ui") #MainWindow.ui - теперь форма из файла ui, загруженного выше self.ui = uiClass() self.ui.setupUi(self)s self.ui.bMagnitOn.clicked.connect( self.MagnitOn ) self.ui.bMagnitSettings.clicked.connect( self.MagnitSettings ) self.ui.bShowAll.clicked.connect( self.ShowAll ) self.ui.bZoom.clicked.connect( self.Zoom ) self.ui.bDeblockAll.clicked.connect( self.DeblockAll ) self.ui.bLayerSettings.clicked.connect( self.LayerSettings ) self.ui.bOnOff.clicked.connect( self.OnOff ) self.ui.bZoomToLayer.clicked.connect( self.ZoomToLayer ) #указываем текущую закладку для табВиджета self.ui.mTab.setCurrentWidget(self.ui.tFile) self.showMaximized() self.ui.twLayers.setColumnWidth(0, 50) def __init__( self ): # Требуется Qt4 для инициализации пользовательского интерфейса #инициализируем майнформ как кувиджет QtGui.QWidget.__init__( self ) self.setupUi( self ) #!!!!!!!!!!!!!создаем ресайзер на мап канвасе self.mapCanvasResizer = WidgetResizer(self.ui.mapCanvas, 0, 0, [self.ui.toolBox, self.ui.tConsole]) self.mapCanvasResizer.show()