2013-06-01 50 views
1

我有一個SingleTweetWidget來顯示推文。爲什麼我有奇怪的額外空間?

如果我把它放到一個QScrollArea,一切工作正常。

class TweetListWidget(QtGui.QWidget): 

    def __init__(self, client=None, parent=None): 
     super(TweetListWidget, self).__init__(parent) 
     self.setupUi() 

    def setupUi(self): 
     self.layout = QtGui.QVBoxLayout(self) 
     self.setLayout(self.layout) 

    def setModel(self, model): 
     self.model = model 
     self.model.rowsInserted.connect(self._rowsInserted) 

    def _rowsInserted(self, parent, start, end): 
     for index in range(start, end + 1): 
      item = self.model.get_item(index) 
      widget = SingleTweetWidget(self.client, item) 
      self.layout.insertWidget(index, widget) 

SingleTweetWidget in a QScrollArea

但是,如果我把它放到一個對話框,會有一些額外的空間。

def setupUi(self, widget): 
    super(NewpostWindow, self).setupUi(widget) 
    tweet = SingleTweetWidget(self.client, self.tweet, self) 
    self.verticalLayout.insertWidget(0, tweet) 

SingleTweetWidget in a QDialog

請注意時間(6s ago)和藍色分割線之間的空間。

它從哪裏來?我不知道它。

順便說一句,你可以從https://github.com/WeCase/WeCase/blob/dev-0.06/src/TweetListWidget.py

+0

你的意思是垂直或水平的空間?我從你的形象中得不到真正的答案。這將是很好的提及它;) – bartimar

+0

我的意思是垂直空間。您可以在時間('6m前')和藍色分隔線之間看到很多額外的空間。 –

回答

0

QDialog得到SingleTweetWidget的源代碼有一個佈局,把小部件之間的垂直空間。這是因爲默認的最小高度QDialog高於兩個小部件的高度。您可以使用self->setMinimumHeight(int)self->setMaximumHeight(int)和寬度變體或self->setFixedSize(w,h)等...

您可以使用每個小部件設置最大/最小寬度/高度。

閱讀一些關於QLayout,QDialog和Qt的內容並查看一些示例。 Qt有非常好的文檔。見

http://qt-project.org/doc/

http://qt-project.org/doc/qt-4.8/examples-layouts.html

http://qt-project.org/doc/qt-4.8/qwidget.html#setFixedSize

+0

問題是,在創建SingleTweetWidget之前,我不知道合適的'MinimumHeight' /'MaximumHeight'。 –

+0

我試着設置'sizePolicy',比如'QtGui.QSizePolicy.Preferred','QtGui.QSizePolicy.Maximum','QtGui.QSizePolicy.Minimum'或'HeightForWidth(True)',它們都不起作用。 –

+0

您不必在未來的文本區域內知道'MinimumHeight' /'MaximumHeight'。爲此,在文本區域和小部件中有'QScrollBar',所以原始小部件不會展開,然後'QDialog'也不會展開。如果您知道創建SingleTweetWidget時的最大值/最小值,請使用構造函數參數:) – bartimar