我有一个带有QStandardItemModel的QComboBox,它只包含一个名为One的项。我希望QComboBox有一个头(我不确定这是正确的技术术语…)这将永远是相同的。下图恰好描述了我想要的。我希望打印"Header“(它不是列表中的元素),而不是在向下按下列表的按钮旁边显示"One”。

重要的是,复选框是强制的(这就是我使用QComboBox的原因)。
我尝试了函数model.setHorizontalHeaderItem(),但它不起作用(参见下面的代码)。请帮帮我。
#include <QApplication>
#include <QComboBox>
#include <QStandardItemModel>
int main( int argc, char **argv )
{
QApplication app( argc, argv );
QComboBox* comboBox = new QComboBox();
QStandardItemModel model( 1, 1 );
QStandardItem *item = new QStandardItem( QString("One") );
item->setFlags( Qt::ItemIsUserCheckable | Qt::ItemIsEnabled );
item->setData ( Qt::Unchecked, Qt::CheckStateRole );
model.setItem(0, 0, item);
model.setHorizontalHeaderItem( 0, new QStandardItem( "Header" ) );
comboBox->setModel( &model );
comboBox->show();
return app.exec();
}发布于 2014-10-23 23:36:55
你可以这样做:
QTreeView *view = new QTreeView();
QStandardItemModel *model = new QStandardItemModel();
ui->comboBox->setModel( model );
ui->comboBox->setView( view );
for ( int i = 0; i < 10; i++ )
{
QStandardItem *item = new QStandardItem();
const QString text = QString( "Item: %1" ).arg( i + 1 );
item->setText( text );
model->appendRow( item );
}
model->setHorizontalHeaderLabels( QStringList() << "It's a column" );你会得到类似这样的结果:

现在,您可以像使用标准QTreeView一样执行所有自定义。
https://stackoverflow.com/questions/26528449
复制相似问题