我正在尝试在Qt 4.7.1中创建模型/视图应用程序。我是一个非常新的Qt开发人员。
我正在尝试做的总结:
我有一个树视图,它被组织成一个行和列的矩形表。一列项目包含一个按钮。默认情况下,此按钮是透明的并禁用。当鼠标悬停在其行上时,给定按钮将变为可见并启用。
我追求的方法是
我无法获得指向窗口小部件的有效指针。
我当前的代码如下所示:
void HistoryTreeView::mouseMoveEvent(QMouseEvent *event)
{
QAbstractItemModel *m(model());
// Only do something when a model is set.
if (m)
{
QModelIndex index = indexAt(event->pos());
if (index.isValid())
{
// if the mouse has moved to another row
if (index.row() != m_currentRow)
{
m_currentRow = index.row();
QMessageBox::information( this, "HistoryTreeView", QString("index(%1)").arg(index.row()));
QWidget * item = indexWidget(index);
Q_ASSERT(item != NULL );
}
}
else // model is invalid
{
m_currentRow = -1;
}
}
QTreeView::mouseMoveEvent(event);
}
症状:
我期望对indexWidget()的调用返回鼠标结束的小部件的有效指针。相反,它意外地返回一个NULL指针。
评论:
名为'index'的变量按预期运行,因为QMessageBox显示正确的行值。因此,我认为我为indexWidget()提供的值没有任何问题。
这只是调试代码。它缺少像代码那样选择保存按钮的列。
答案 0 :(得分:0)
好的,这是我理解错误的本质。
我错误地理解视图中的每个项目都是自己的小部件。我现在明白视图本身是一个小部件,但视图中的各个项本身不是小部件。
因为我误解了视图项目是小工具我认为可以:
indexWidget()只返回一个NULL,因为视图项不是小部件。