Я пытаюсь создать приложение модель / представление в 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 () вернет действительный указатель на виджет, на котором находится мышь. Вместо этого он неожиданно возвращает нулевой указатель.
Комментарий:
Переменная с именем index работает так, как я ожидал, потому что QMessageBox показывает правильное значение строки. Следовательно, я не думаю, что что-то не так со значением, которое я предоставляю indexWidget ().
Это просто отладочный код. В нем отсутствуют такие вещи, как код, который выбирает столбец с кнопками.