Я учусь настройке перетаскивания в описании структуры модели просмотра на сайте QT. При применении к удобному взгляду (QListWidget, qtablewidget , Qtreewidget ), документация использует либо (в исходной версии C ++):
listWidget->setDragEnabled(true);
listWidget->viewport()->setAcceptDrops(true);
< /code>
или: < /p>
listWidget->setDragDropMode(QAbstractItemView::InternalMove);
Я не могу выяснить, является ли Setdragdropmode ярлыком для установки отдельных свойств виджета и какие в дополнение к двум выше, или на самом деле это делает больше. Я вижу, как QabstractitemView :: internalMove и QabstractitemView :: Dragdrop оба устанавливают Dragenabled и setacceptdrops к True , но приводят к другому поведению для элемента (Move vs. Copy), поэтому я знаю, что за режим стоит больше метода режима. Я хотел бы уточнить эту точку, чтобы узнать, когда использовать метод режима. /> < /ul>
Я использую qt для python, если это важно. < /p>
В качестве примера, если я создаю виджет списка с каждым подходом, кажется, что результат совершенно эквивалентен (в этом конкретном случае): < /p>
, кажется, результат совершенно эквивалентен (в этом конкретном случае): < /p>
from qtpy.QtWidgets import (QApplication, QWidget, QListWidget, QHBoxLayout)
class Window(QWidget):
texts = ['Sycamore', 'Chestnut', 'Walnut', 'Mahogany']
def __init__(self):
super().__init__()
lw_1 = QListWidget()
lw_1.addItems(self.texts)
self.print_props('When created', lw_1)
lw_2 = QListWidget()
lw_2.addItems(self.texts)
# Comparing
lw_1.setDragEnabled(True)
lw_1.viewport().setAcceptDrops(True)
lw_1.setDropIndicatorShown(True)
self.print_props('Using properties', lw_1)
# With
mode = lw_2.DragDrop
lw_2.setDragDropMode(mode)
self.print_props(f'Using mode ({mode})', lw_2)
layout = QHBoxLayout(self)
layout.addWidget(lw_1)
layout.addWidget(lw_2)
def print_props(self, text, widget):
print()
print(text)
print('drag:', widget.dragEnabled())
print('drop:', widget.viewport().acceptDrops())
print('mode:', widget.dragDropMode())
def main():
app = QApplication([])
window = Window()
window.show()
app.exec()
main()
Подробнее здесь: https://stackoverflow.com/questions/796 ... of-the-dra