我有QComboBox
QStandardItemModel
,其中包含一个名为One
的项目。
我希望QComboBox
有一个标题(我不确定这是正确的技术术语......),它总是一样的。
下图描绘了我想要的内容。而不是拥有" One"在按下列表的按钮旁边,我想要" Header"打印(不是列表的元素)。
重要的是,该复选框是必填项(这就是我使用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();
}
答案 0 :(得分:1)
您可以这样做:
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
进行所有自定义。