首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QComboBox和HeaderItem

QComboBox和HeaderItem
EN

Stack Overflow用户
提问于 2014-10-23 20:47:15
回答 1查看 1.2K关注 0票数 0

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

重要的是,复选框是强制的(这就是我使用QComboBox的原因)。

我尝试了函数model.setHorizontalHeaderItem(),但它不起作用(参见下面的代码)。请帮帮我。

代码语言:javascript
复制
#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();
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-23 23:36:55

你可以这样做:

代码语言:javascript
复制
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一样执行所有自定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26528449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档