- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个自定义 QListWidget,其中添加了自定义列表小部件(在本例中只是 QPushButton 小部件),所有设置都添加到它的 QListWidgetItems 中,以便我可以从 QPushButton 拖放,以向 QListWidget 添加另一个按钮。在第一个列表小部件中,您会注意到两个列表小部件项目之间有一条虚线,表示您可以在两个现有小部件之间拖动并插入小部件。然而,通过我的自定义列表,我失去了这种行为。我仍然可以将它们放在现有的小部件之间,但是没有像以前那样向用户提供视觉指示,即两个小部件之间将插入的水平条。有谁知道我会怎么做?您可以在下图中看到,第一个列表中的行是在两个列表之间插入项目的默认指示符。红色箭头指向我想要创建的那种自定义插入指示器。
其次,当我从自定义 QPushButton 中拖放时,它会突出显示为黑色,但再也不会返回到正常的灰色,如上图所示。我怎样才能让这个按钮恢复到默认状态?
from inspect import isclass
from shiboken2 import wrapInstance
from PySide2 import QtCore, QtGui, QtWidgets
from maya import OpenMayaUI as omui
def show_ui():
main_win_obj = omui.MQtUtil.mainWindow()
main_win = wrapInstance(long(main_win_obj), QtWidgets.QWidget)
win = Test(parent=main_win)
win.show()
class DragButton(QtWidgets.QPushButton):
def __init__(self, parent=None, text=''):
super(DragButton, self).__init__()
self.setText(text)
def mouseMoveEvent(self, event):
if event.buttons() != QtCore.Qt.LeftButton:
super(DragButton, self).mouseMoveEvent(event)
return
btn_img = self.grab()
painter = QtGui.QPainter(btn_img)
painter.setCompositionMode(
painter.CompositionMode_DestinationIn
)
painter.fillRect(btn_img.rect(), QtGui.QColor(0, 0, 0, 127))
painter.end()
data = QtCore.QMimeData()
data.setText('ReorderListAdd()')
drag = QtGui.QDrag(self)
drag.setMimeData(data)
drag.setPixmap(btn_img)
drag.setHotSpot(event.pos())
drag.exec_(QtCore.Qt.CopyAction)
super(DragButton, self).mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
data = QtCore.QMimeData()
data.setText('my text')
drag = QtGui.QDrag(self)
drag.setMimeData(data)
drag.exec_()
super(DragButton, self).mouseReleaseEvent(event)
class ReorderList(QtWidgets.QListWidget):
def __init__(self, parent=None):
super(ReorderList, self).__init__(parent)
self.setDragDropMode(
QtWidgets.QAbstractItemView.InternalMove
)
self.setAcceptDrops(True)
self.setAlternatingRowColors(True)
self.setSelectionMode(
QtWidgets.QAbstractItemView.SingleSelection
)
self.setDragDropMode(
QtWidgets.QAbstractItemView.InternalMove
)
def add_btn(self, text='', index=-1):
widget = QtWidgets.QWidget()
if not text:
text = 'item {0}'.format(self.count() + 1)
btn = QtWidgets.QPushButton(text)
layout = QtWidgets.QVBoxLayout(widget)
layout.setContentsMargins(2, 2, 2, 2)
layout.setSpacing(2)
layout.addWidget(btn)
item = QtWidgets.QListWidgetItem()
item.setSizeHint(widget.sizeHint())
if index < 0:
self.addItem(item)
else:
self.insertItem(index, item)
self.setItemWidget(item, widget)
def dropEvent(self, event):
drop_index = self.indexAt(event.pos()).row()
self.add_btn(index=drop_index)
super(ReorderList, self).dropEvent(event)
def dragEnterEvent(self, event):
event.accept()
def dragMoveEvent(self, event):
event.accept()
def onClick(self):
print self.sender().text()
class Test(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(Test, self).__init__(*args, **kwargs)
self.list1 = QtWidgets.QListWidget()
self.list1.setDragDropMode(
QtWidgets.QAbstractItemView.DragDrop
)
self.list1.setSelectionMode(
QtWidgets.QAbstractItemView.SingleSelection
)
self.list1.setDragDropMode(
QtWidgets.QAbstractItemView.InternalMove
)
self.list1.setMaximumHeight(60)
self.list2 = ReorderList()
self.list2.setMaximumHeight(120)
for name in ('item 1', 'item 2', 'item 3'):
item = QtWidgets.QListWidgetItem(name)
self.list1.addItem(item)
self.list2.add_btn(text=name)
self.btn = DragButton(text='Add list button')
self.btn.clicked.connect(self.list2.add_btn)
self.widget = QtWidgets.QWidget()
self.setCentralWidget(self.widget)
self.layout = QtWidgets.QVBoxLayout(self.widget)
for item in (self.list1, self.list2, self.btn):
self.layout.addWidget(item)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = Test()
win.show()
sys.exit(app.exec_())
我希望在 QListWidget 中插入小部件时能够有一个水平条,并使已药物的按钮返回到默认颜色。
以下是我可以找到的一些类似链接,帮助我做到这一点:
最佳答案
由于拖放是自定义的,因此您必须进行绘制,因此您必须在 DragMoveEvent 方法中使用 QModelIndex 检测项目的矩形。然后进行绘画,但由于小部件的大小,它不会被看到,所以我看了一下,我创建了一个修改编辑器几何形状的委托(delegate)。
class Delegate(QtWidgets.QStyledItemDelegate):
def updateEditorGeometry(self, editor, option, index):
super(Delegate, self).updateEditorGeometry(editor, option, index)
geo = editor.geometry().adjusted(0, 4, 0, 0)
editor.setGeometry(geo)
class ReorderList(QtWidgets.QListWidget):
def __init__(self, parent=None):
super(ReorderList, self).__init__(parent)
delegate = Delegate(self)
self.setItemDelegate(delegate)
self.dropIndicatorRect = QtCore.QRect()
self.setDragDropMode(
QtWidgets.QAbstractItemView.InternalMove
)
self.setAcceptDrops(True)
self.setAlternatingRowColors(True)
self.setSelectionMode(
QtWidgets.QAbstractItemView.SingleSelection
)
self.setDragDropMode(
QtWidgets.QAbstractItemView.InternalMove
)
def add_btn(self, text='', index=-1):
widget = QtWidgets.QWidget()
if not text:
text = 'item {0}'.format(self.count() + 1)
btn = QtWidgets.QPushButton(text)
item = QtWidgets.QListWidgetItem()
item.setSizeHint(btn.sizeHint())
if index < 0:
self.addItem(item)
else:
self.insertItem(index, item)
self.setItemWidget(item, btn)
def dropEvent(self, event):
drop_index = self.indexAt(event.pos()).row()
self.add_btn(index=drop_index)
self.dropIndicatorRect = QtCore.QRect()
self.viewport().update()
super(ReorderList, self).dropEvent(event)
def dragEnterEvent(self, event):
event.accept()
def dragLeaveEvent(self, event):
self.dropIndicatorRect = QtCore.QRect()
self.viewport().update()
super(ReorderList, self).dragLeaveEvent(event)
def dragMoveEvent(self, event):
event.accept()
def onClick(self):
print(self.sender().text())
def dragMoveEvent(self, event):
index = self.indexAt(event.pos())
if index.isValid():
rect = self.visualRect(index)
if self.dropIndicatorPosition() == QtWidgets.QAbstractItemView.OnItem:
self.dropIndicatorRect = rect
else:
self.dropIndicatorRect = QtCore.QRect()
else:
self.dropIndicatorRect = QtCore.QRect()
self.viewport().update()
super(ReorderList, self).dragMoveEvent(event)
def paintEvent(self, event):
super(ReorderList, self).paintEvent(event)
if not self.dropIndicatorRect.isNull() and self.showDropIndicator():
painter = QtGui.QPainter(self.viewport())
p = QtGui.QPen(painter.pen())
p.setWidthF(1.5)
painter.setPen(p)
r = self.dropIndicatorRect
painter.drawLine(r.topLeft(), r.topRight())
关于python - QListWidget:如何拖放插入带有图标的自定义小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54684840/
我从来没有遇到过这种问题 - 我也不知道为什么.. 有些图标丢失并以“?/!”闪烁显示 发生了什么事? 它是一个提交按钮。我在另一个按钮中有相同的图标 - 那里没问题。 SIGN! 有什
我只需要在单击按钮时显示 ionic 图标。 我试着在那个图标上放一个类并做到了: .icn { visibility: visible; } 但是没有用,有没有人知道另一种方法? 最佳答案 Sho
我用qt在托盘里做了一个应用。在我的电脑上,这是一个很好的项目,我在托盘栏中看到了图标,但是当我将其发布给其他人时,他们看不到该图标,它只是一个可以使用但不显示图标的隐形方 block 。但在我的电脑
我想使用delphi将图标/ bmp绘制到TListView的子项中。但是我不知道该怎么做到。它适用于列表中的第一项,但子项存在问题。 最佳答案 您可以使用CustomDrawSubItem事件。 下
我想将标题栏中的图标设置为应用程序的图标 [[myWindow standardWindowButton:NSWindowDocumentIconButton] setImage:[NSApp app
可以设置一个图标,以便在当前应用程序的每个窗口上使用它。这样我就设置了一次(不是手动在每个窗口上设置)..? 最佳答案 关于这个主题的一个很好的引用在这里 MSDN 。表明您有一个应用程序图标(桌面图
我为自己制作了一个小书签,它的功能很好,但当添加到 Opera 或 Firefox 的工具栏时,它只是呈现浏览器的默认书签图标(分别是地球仪和星星)。我的网站有一个网站图标,窗口、选项卡甚至 [网站]
制表符中的responsiveCollapse 折叠展开功能的默认图标似乎未居中。是否有更改此图标的选项。也许是右下胡萝卜? 最佳答案 responsiveCollapse 格式化程序只是一个像所有其
上面是下拉列表,当单击列表时,其值将与图像一起显示在上面的字段(顺便说一句,这是一个按钮)中。我已经实现了显示文本,但似乎无法显示图像。这是我的标记如下... 广东 @foreach
我想将我们数据库中的电线杆和电缆导出到 Google 地球的 KML 文件中。 对于每个节点,我们都有一个极阵列,电缆始终连接到阵列中的下一个极。 制作简单路径的导出似乎很容易。但是这些路径只是显示一
我想将我们数据库中的电线杆和电缆导出到 Google 地球的 KML 文件中。 对于每个节点,我们都有一个极阵列,电缆始终连接到阵列中的下一个极。 制作简单路径的导出似乎很容易。但是这些路径只是显示一
在 JTable 中显示数据。一列用作字段复选框。问题是在显示ChceckBox 中而不是出现图标true/false。我该如何解决这个问题? 添加数据: private DefaultTableMo
[编辑] 我想使用 DataTable 在 Datagridview 中使用图像。 RadioButton 只是这篇文章的一种简单问题格式。 让我为此澄清一下。 如何使用绑定(bind)样式在 dat
我正在使用 C# 开发 win 表单应用程序。我遇到了一个需要向用户提供 ComboBox 的场景。现在,为了使外观更具吸引力,我想在该组合框的每个项目之前显示一个小图像或图标。 我查看了一些提供此功
我正在 CrossRider 中构建一个扩展。我需要在数据库中保存我有它们的 url 的图像/图标。它们是微小的图像,不会成为数据库中的问题。我可能有类似的东西可以访问 background.js:
我需要使用我的 JavaFX 应用程序中的一些元素,这些元素使用 带有自定义符号/图标的按钮 横幅或背景图像。 此应用程序应该在具有不同屏幕分辨率的多个设备上运行,并且我还(最终)需要缩放图像/图标(
我怎样才能在 android studio 中做这样的事情: 我想要一个导航栏,您可以在其中看到名称、图标以及打开抽屉导航的机会 :D (图片是用Figma制作的) 最佳答案 将重力设置为在 Draw
当我在 ViewPager 中滑动 fragment 时,如何动态更改 Action Bar 的操作按钮图标。取决于 fragment 按钮必须改变状态(图标)。 最佳答案 您可以在 onPrepar
我有两个 while 循环,一个是循环遍历聊天日志以检索日期、用户名、消息,另一个 while 循环 是从单独的表中检索图标这有两列 chars 和 image (image-name.*) 我可以显
我正在尝试重新启动 mysql(一个完全不同的问题),MySql 肯定已安装(版本 14.14),并且根据我收集的信息,我应该在系统偏好设置面板的底部看到它的图标,但它是不在那里。安装过程中是否出现了
我是一名优秀的程序员,十分优秀!