【问题标题】:Catch item creation moment in QTreeView to set custom widget在 QTreeView 中捕捉项目创建时刻以设置自定义小部件
【发布时间】:2014-07-09 10:56:22
【问题描述】:

我有从 QAbstractItemModel 继承的自定义模型和从 QAbstractItemView 继承的自定义视图。模型是对组织为树的数据的包装。当模型更改时,它会发出必要的信号来通知视图有关更改。视图具有默认的项目委托。

现在我想为视图中的每个项目创建一个自定义小部件,并使用 QAbstractItemView::setIndexWidget() 进行设置。如何捕捉和处理视图中的每个项目创建?

【问题讨论】:

  • QAbstractItemModel::rowsInserted() 信号呢?
  • @vahancho 在更改模型后至少有两个信号可以发射:rowsInserted 和 layoutChanged。我可以听他们两个,在第一种情况下为特定行创建自定义小部件,在第二种情况下创建所有这些。但这是一个好方法还是有更好的方法?我还需要在我的基本视图类之后获得该信号。如果我在基类之后连接到模型,我会在基类之后得到这些信号吗?
  • 您最好使用自定义itemdelegate?这只会根据需要询问编辑
  • @ratchetfreak 我根本不使用编辑器。我想使用小部件来显示项目。
  • 然后使用它的paint 函数使用您的自定义小部件的render 函数“橡皮戳”它

标签: qt qabstractitemview


【解决方案1】:

你最好使用itemdelegate

class MyItemDelegate: public QAbstractItemDelegate
{
Q_OBJECT

  QWidget *widget;

public:
  MyItemDelegate(QObject *p):QAbstractItemDelegate(p)
  {
    //create widget
  }


  void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
  {
      //initialize painting widget
      widget->render(painter);
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2013-02-23
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    相关资源
    最近更新 更多