我正在实施QAbstractTableModel
,我想在每行的最后一列插入QPushButton
。当用户单击此按钮时,将显示一个新窗口,其中包含有关此行的更多信息。
你知道如何插入按钮吗?我知道委派系统,但所有的例子都只是关于“如何使用组合框编辑颜色”......
答案 0 :(得分:5)
您可以使用
QPushButton* viewButton = new QPushButton("View");
tableView->setIndexWidget(model->index(counter,2), viewButton);
答案 1 :(得分:3)
模型 - 视图架构不是为了将小部件插入不同的单元格,而是可以在单元格中绘制按钮。
区别在于:
那说,这是怎么做的:
子类QAbstractItemDelegate(或QStyledItemDelegate)并实施paint()
方法。要绘制按钮控件(或任何其他控件),您需要使用样式或QStylePainter::drawControl()
方法:
class PushButtonDelegate : public QAbstractItemDelegate
{
// TODO: handle public, private, etc.
QAbstractItemView *view;
public PushButtonDelegate(QAbstractItemView* view)
{
this->view = view;
}
void PushButtonDelegate::paint(
QPainter* painter,
const QStyleOptionViewItem & option,
const QModelIndex & index
) const
{
// assuming this delegate is only registered for the correct column/row
QStylePainter stylePainter(view);
// OR: stylePainter(painter->device)
stylePainter->drawControl(QStyle::CE_PushButton, option);
// OR: view->style()->drawControl(QStyle::CE_PushButton, option, painter, view);
// OR: QApplication::style()->drawControl(/* params as above */);
}
}
由于委托让您进入模型视图领域,因此请使用有关选择和编辑的视图信号来弹出信息窗口。
答案 2 :(得分:0)
您可以使用setCellWidget(row,column,QWidget*)
在特定单元格中设置小部件。