Свойство Qt opaqueresize для значения QSplitter

Я не нашел этого в Интернете...

Что делает это opaqueResize свойство на QSplitter ( см. документ) означает?

Благодарю.

1 ответ

Решение

Я не совсем уверен, что вы спрашиваете здесь. Это все в документах.

QSplitter изменяет размеры своих потомков динамически по умолчанию. Если вы предпочитаете, чтобы QSplitter изменял размер дочерних элементов только в конце операции изменения размера, вызовите setOpaqueResize(false)

Смысл, если вы установите setOpaqueResize(false) на вашем сплиттере запустите ваше приложение и попытайтесь вытащить сплиттер, чтобы изменить размеры виджетов, которые он содержит, он фактически не изменит размер виджетов, пока вы не отпустите сплиттер. С другой стороны, если он установлен в true он будет пытаться изменить размеры виджетов, пока вы перетаскиваете маркер сплиттера.

Может быть полезно отключить эту функцию, если ваши пользовательские виджеты отнимают много времени, например, так как изменение размера будет довольно медленным.

Но чтобы ответить на ваш вопрос, собственность opaqueResize Сохраняет, является ли изменение размера непрозрачным или нет, т.е. будет ли оно изменять размеры виджетов при перетаскивании сплиттера или нет.


Пример:

Вот пример PyQt, который вы можете попробовать (у меня был пример, лежащий в Python, но он должен работать так же в C++):

from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):
    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs)
        top = QtGui.QLabel('test', self)
        bottom = QtGui.QPushButton('test', self)
        splitter = QtGui.QSplitter(QtCore.Qt.Vertical)
        # Try changing from False to True
        splitter.setOpaqueResize(False)
        splitter.addWidget(top)
        splitter.addWidget(bottom)
        hbox = QtGui.QHBoxLayout(self)
        hbox.addWidget(splitter)
        self.setLayout(hbox)
        self.setGeometry(250, 200, 350, 250)

def main():
    app = QtGui.QApplication([])
    ex = Example()
    ex.show()
    app.exec_()

if __name__ == '__main__':
    main()

Надеюсь, это прояснит ситуацию.

Другие вопросы по тегам