我在QTableView(工作)中使用拖放功能.但是,我没有看到任何跌落指标.我应该看到一条应该插入掉线的线,不应该吗?至少
here他们这么说.
我的init非常标准.
// see model for implementing logic of drag
this->viewport()->setAcceptDrops(allowDrop);
this->setDragEnabled(allowDrag);
this->setDropIndicatorShown(true);
this->m_model->allowDrop(allowDrop);
我不知道为什么我没有看到指标.样式表与视图一起使用,可能就是原因.但是,我已经禁用了样式表,但仍然没有看到它.
视图使用整行进行选择,不确定这是否会导致问题.所以任何暗示都值得赞赏.
– 编辑 –
截至下面的评论,尝试了所有选择模式:单,多或扩展,没有视觉效果.也试过细胞而不是行选择,再没有任何改进.
– 编辑2 –
目前正在评估another style proxy example,类似于下面的那个,最初引用here
– 相关 –
QTreeView draw drop indicator
How to highlight the entire row on mouse hover in QTableWidget: Qt5
https://forum.qt.io/topic/12794/mousehover-entire-row-selection-in-qtableview/7
https://stackoverflow.com/a/23111484/356726
最佳答案 我遇到了同样的问题,我尝试了两个对我有用的选项. IIRC,帮助来自SO的回答.
>如果您是QTreeView的子类,则可以覆盖其paintEvent()方法.它默认调用drawTree()方法和paintDropIndicator()一个(后者是QAbstractItemView私有类的一部分).
你可以从paintEvent()调用drawTree(),它也应该覆盖默认的拖放指示器:
class MyTreeView : public QTreeView
{
public:
explicit MyTreeView(QWidget* parent = 0) : QTreeView(parent) {}
void paintEvent(QPaintEvent * event)
{
QPainter painter(viewport());
drawTree(&painter, event->region());
}
};
>另一种方法是子类QProxyStyle并覆盖drawPrimitive()方法.当您将元素QStyle :: PE_IndicatorItemViewItemDrop作为参数获取时,您可以按照自己的方式绘制它.
代码如下所示:
class MyOwnStyle : public QProxyStyle
{
public:
MyOwnStyle(QStyle* style = 0) : QProxyStyle(style) {}
void drawPrimitive(PrimitiveElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const
{
if (element == QStyle::PE_IndicatorItemViewItemDrop)
{
//custom paint here, you can do nothing as well
QColor c(Qt::white);
QPen pen(c);
pen.setWidth(1);
painter->setPen(pen);
if (!option->rect.isNull())
painter->drawLine(option->rect.topLeft(), option->rect.topRight());
}
else
{
// the default style is applied
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
}
};