2016-06-13 12 views
4

私はQTableView(作品)にドラッグアンドドロップします。しかし、私はドロップインジケーターが表示されません。ドロップが挿入されるはずの行が表示されるはずです。少なくともhereと言います。QTableViewにドロップインジケーターが表示されないのはなぜですか?

私のinitはかなり標準です。

// see model for implementing logic of drag 
    this->viewport()->setAcceptDrops(allowDrop); 
    this->setDragEnabled(allowDrag); 
    this->setDropIndicatorShown(true); 
    this->m_model->allowDrop(allowDrop); 

なぜ表示器が表示されないのかわかりません。スタイルシートがビューに使用されています。これが理由です。しかし、私はスタイルシートを無効にしていて、まだそれを見ません。

このビューでは、選択するために行全体が使用されますが、これによって問題が発生するかどうかはわかりません。だから、どんなヒントもありがとう。

- [編集] - 以下のコメントのように、すべての選択モード試み

:、単一のマルチまたは拡張、視覚的効果。行選択の代わりにセルを試しましたが、やはり改善はありません。

- 関連 - -

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
現在もともとhere

参照し、以下のいずれかに似たanother style proxy exampleを評価

- 編集2

+1

コンテキストの不明確しかし:それは同様に選択モードに関係しています。設定は何ですか?例えば。テーブルビュー - > setSelectionMode(QAbstractItemView :: ExtendedSelection); – AlexanderVX

+0

は、シングル、マルチ、エクステンションの3つのモードを試しました。 –

答えて

1

私は同じ問題に直面しましたが、私はどちらも私のために働いた2つのオプションを試しました。 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); 
     } 
    } 
}; 
+0

私はQProxyStyleApproachを試しました。私は描画線の部分が呼び出されて参照してください、私の非常事態に視覚的な影響を参照してください。前と同じように見える。他の仮想実装であるdoc.qt.io/qt-5/qproxystyleを試してみましょう。html#QProxyStyle渡されたrectは常に0x0サイズを持つようです。 –

+0

ここにhttps://forum.qt.io/topic/62496/is-it-possible-for-a-qtableview-to-accept-a-drop-in-theempty-area-below-its-last-同じアプローチ( 'QProxyStyle')について議論していますが、' QTableView'には適用できないようです –

関連する問題