我需要将自定义小部件放在子类QTableView
的{{1}}单元格内。
我搜索已经给出的解决方案,但没有人抓住我的需求。
自定义窗口小部件必须始终保持在此处,而不仅仅是在QAbstractTableModel
之类的编辑模式下。
自定义小部件可能就是一切,我正在为所有小部件搜索一般解决方案QItemDelegate::createEditor
或QPushButtons
。
抱歉我的英文。
答案 0 :(得分:1)
您可以使用QAbstractItemView::setIndexWidget
并覆盖QAbstractItemView::dataChanged
来达到您想要的效果,如下所示:
class MyTableView : public QTableView
{
protected:
void dataChanged(const QModelIndex &topLeft, const QModelIndex & bottomRight, const QVector<int> & roles)
{
QPushButton *pPushButton = qobject_cast<QPushButton*>(indexWidget(topLeft));
if (pPushButton)
pPushButton->setText(model()->data(topLeft, Qt::DisplayRole).toString());
else
QTableView::dataChanged(topLeft, bottomRight, roles);
}
};
void main ()
{
MyTableView table;
table.setCellWidget(table.model()->index(0, 0, QModelIndex()),new QPushButton());
}
请注意,这是一个不完整的实现,但它应该向您展示如何解决您的问题。一个真正的实现应该更新topLeft和bottomRight之间的所有QPushButton。