Форум сайта python.su
День добрый всем!
Есть различия между тем, как заголовки tab-виджетов возвращаются в область заголовков при использовании QDockWidget:
1) Двойной клик по заголовку виджета превращает tabbed-window во floating-window
2) Двойной клик по заголовку floating-window возвращает заголовок на прежнюю позицию (порядок табов не меняется)
3) Перетаскивание окна обратно в dock-area перемещает заголовок в нулевую позицию (порядок табов меняется)
Как сделать так, чтобы порядок не менялся? Спасибо!
Python version is 3.1.1.final.0
Qt version is 4.5.3
PyQt version is 4.6.2
Вот примерчик:
from PyQt4 import Qt as qt
import sys
app = qt.QApplication(sys.argv)
mw = qt.QMainWindow()
mw.setWindowState(qt.Qt.WindowMaximized)
mw.setTabPosition(qt.Qt.LeftDockWidgetArea,qt.QTabWidget.North)
mw.dockwidgets = []
for i in range(5):
dw = qt.QDockWidget(str(i+1))
dw.setWidget(qt.QTextEdit("""
1) Double-clicking dock widget caption converts tabbed window to floating window.<br>
2) Double-clicking floating window caption returns tab caption to it's previous position (<b>tab order does not change</b>)<br>
3) Dragging window back to tabbed widgets returns tab caption to zero-position (<b>tab order changes</b>)<br>
How do I make order not to change? Thank you!<br>
Python version is %s<br>
Qt version is %s<br>
PyQt version is %s<br>
""" % (("%s."*5)[0:-1] % tuple(sys.version_info), qt.qVersion(),qt.PYQT_VERSION_STR)))
mw.dockwidgets.append(dw)
mw.addDockWidget(qt.Qt.LeftDockWidgetArea, mw.dockwidgets[i])
if i > 0: mw.tabifyDockWidget(mw.dockwidgets[i-1],mw.dockwidgets[i])
mw.show()
res = app.exec_()
sys.exit(res)
Офлайн
Нельзя запоминать порядок и при перетаскивании окна обратно в dock-area (сигнал topLevelChanged(bool)) восстанавливать порядок?
Для этих целей можно поюзать saveState & restoreState, либо свое написать.
Офлайн
saveState и restoreState требуют уникальных objectName для виджетов, но ведь двойной клик по заголовку окна как-то обходится без этого…
Положим, даже если я смогу перехватить возвращение окна в таб по сигналу topLevelChanged, то как мне поменять заголовки местами?
Нашел соответсвующий qtbug - буду ждать. Спасибо!
Офлайн
Там кто-то уже более двух лет ждёт, 3 релиза уже прошло:) Лично я не вижу логичным ваш комментарий в багтрекере Qt.
Офлайн
Точно, не заметил =)
Не знаю что еще можно придумать…
Офлайн
StudentikИ в чем проблема? dw.setObjectName(str(i+1))
saveState и restoreState требуют уникальных objectName для виджетов
Офлайн