在下面的代码中,使用QTextEdit
时,QGraphicsView
和QHBoxLayout
小部件的顶部未对齐。但是,如果您注释掉QTextEdit
并取消注释其他QGraphicsView
设置,则小部件的顶部会完美对齐。以下是我的问题:
导致此对齐问题的原因是什么以及如何修复?
使用Qt Creator可以最好地避免这样的问题吗?
整个QGraphicsView() - > QGraphicsScene() - > QWidget()需要将图形放在其他小部件旁边吗?
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__()
# Create Widget1
widget1 = QTextEdit()
#widget1 = QWidget()
#view1 = QGraphicsView()
#scene1 = QGraphicsScene(0,0,200,500)
#view1.setScene(scene1)
#layout = QHBoxLayout()
#layout.addWidget(view1)
#widget1.setLayout(layout)
# Create Widget2
widget2 = QWidget()
view2 = QGraphicsView()
scene2 = QGraphicsScene(0,0,200,500)
view2.setScene(scene2)
layout = QHBoxLayout()
layout.addWidget(view2)
widget2.setLayout(layout)
# Layout of Side by Side windows
container = QWidget()
layout = QHBoxLayout()
layout.addWidget(widget1)
layout.addWidget(widget2)
container.setLayout(layout)
# Scroll Area Properties
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(False)
scroll.setWidget(container)
# Scroll Area Layer add
vLayout = QVBoxLayout(self)
vLayout.addWidget(scroll)
self.setLayout(vLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = Widget()
dialog.show()
app.exec_()
答案 0 :(得分:0)
布局有默认边距。因此,如果一个窗口小部件位于布局中,而其邻居不在布局中,则它们将不会对齐。要删除默认边距,您可以执行以下操作:
layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
但是,在您的示例中,QGraphicsView
的容器窗口小部件和布局没有做任何有用的事情。因此,你可以删除它们,并与其他一些简化一起实现:
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__()
widget1 = QTextEdit()
widget2 = QGraphicsView()
widget2.setScene(QGraphicsScene(0, 0, 200, 500, widget2))
container = QWidget()
layout = QHBoxLayout(container)
layout.addWidget(widget1)
layout.addWidget(widget2)
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(False)
scroll.setWidget(container)
vLayout = QVBoxLayout(self)
vLayout.addWidget(scroll)
在试验复杂应用程序的布局时,使用Qt Designer当然非常有用。但是,与手动编码时可以实现的代码相比,它生成的代码通常非常冗长。但是,对于长期可维护性,使用Qt Designer似乎是最好的选择。