QTreeView のサブクラスがあります。その中の特定のアイテムのカスタム コンテキスト メニューが必要です。これを取得するには、コンテキスト メニュー ポリシーを設定し、QTreeView のサブクラスのコンストラクターで "customContextMenuRequested" シグナルを接続します。
setContextMenuPolicy( Qt::CustomContextMenu );
QObject::connect( this, SIGNAL( customContextMenuRequested( const QPoint & ) ), this, SLOT( onCustomContextMenu( const QPoint & ) ) );
これで、スロット関数「onCustomContextMenu」で、コンテキスト メニューを作成する位置を QPoint として取得します。この位置に表示されている QStandardItem を取得したいと思います。私はこれを試しました:
void t_my_tree_view::onCustomContextMenu( const QPoint &point )
{
QModelIndex index = this->indexAt( point );
QStandardItem* item_ptr = m_item_model->item( index.row, index.column() );
}
m_item_model は、QTreeview のこのサブクラスのモデルである QStandardItemModel へのポインターです。
問題は、取得した「item_ptr」が時々間違っているか、NULL であることです。私のモデルが次のようになっている場合、NULL になります。
invisibleRootItem
|-item_on_level_1
|-item_on_level_2
|-item_on_level_2
|-item_on_level_2 <-- これは右クリックが
|-item_on_level_2だったアイテムです
私は何を間違っていますか?右クリックしたアイテムを取得するにはどうすればよいですか?