QComboBox和HeaderItem

时间:2014-10-23 12:47:15

标签: c++ qt qcombobox

我有QComboBox QStandardItemModel,其中包含一个名为One的项目。 我希望QComboBox有一个标题(我不确定这是正确的技术术语......),它总是一样的。 下图描绘了我想要的内容。而不是拥有" One"在按下列表的按钮旁边,我想要" Header"打印(不是列表的元素)。 enter image description here

重要的是,该复选框是必填项(这就是我使用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();
}

1 个答案:

答案 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" );

你会得到这样的东西: ComboBox with header

现在,您可以使用标准QTreeView进行所有自定义。