这就是我想做的事情(所有的父元素和子元素都必须在右边拥有一个 关闭 按钮,未来只有鼠标悬停在该项上时才能显示关闭按钮):
我的委托代码:
class CloseButton : public QItemDelegate
{
Q_OBJECT
public:
CloseButton( QObject* parent = 0 )
: QItemDelegate( parent )
{};
QWidget* createEditor( QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
if ( index.column() == 1 )
{
QToolButton* button = new QToolButton( parent );
button->setIcon( QIcon( CLOSE_ICON ) );
//button->setFixedSize( 16, 16 );
//button->setAutoRaise( true );
//button->setVisible( true );
CONNECT( button, SIGNAL( clicked() ), this, SLOT( emitCommitData() ) );
return button;
}
return ( new QWidget );
}
private slots:
void emitCommitData()
{
emit commitData( qobject_cast< QWidget* >( sender() ) );
}
private:
//Q_DISABLE_COPY( CloseButton );
};
使用 QTreeWidget
连接代码:
recipientsView()->setItemDelegateForColumn( 1, new CloseButton( this ) );
问题在于recipientsView()
是一个简单的QTreeWidget
。
问题是QToolButton
根本没有显示出来(它必须在第二列,即树中的列索引为1
)。我做错了什么?
我已经检查过关于委托的所有Qt演示示例,并且已经搜索了有关QItemDelegate
和类似内容的第一个Google结果。
createEditor()
方法没有被执行。 - mosg