Я пытаюсь создать приложение модели/представления в Qt 4.7.1. Я очень новый разработчик Qt.indexWidget() неожиданно возвращает указатель NULL
Резюме того, что я пытаюсь сделать:
У меня есть TreeView, которая организована в виде прямоугольной таблицы строк и столбцов. Один столбец элементов содержит кнопку. По умолчанию эта кнопка должна быть прозрачной и отключена. Данная кнопка должна стать видимой и включаться, когда мышь нависает над ее строкой.
подход я преследую это
- найти индекс модели для ячейки, что мышь парящей над и
- получить указатель на виджет, связанный с виджетом, и
- используя этот указатель, управляйте видимостью кнопки внутри указанного виджета.
Я не могу получить действительный указатель на виджет.
мой текущий код выглядит следующим образом:
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.
Комментарий:
переменная с именем «Индекс» действует, как я ожидал, потому что QMessageBox показывает правильное значение строки. Следовательно, я не думаю, что что-то не так с значением, которое я предоставляю indexWidget().
Это всего лишь код отладки. В нем отсутствуют такие вещи, как код, который выбирает столбец, который содержит кнопки.
Это неверно, вы можете использовать setIndexWidget() для установки QWidget в ячейке.Он возвращает значение null, если вы не установили виджет индекса для этого индекса. – fonZ 2016-03-11 17:16:10