【问题标题】:QComboBox and HeaderItemQComboBox 和 HeaderItem
【发布时间】:2014-10-23 12:47:14
【问题描述】:

我有一个 QComboBox 和一个 QStandardItemModel,其中包含一个名为 One 的项目。 我希望QComboBox 有一个标题(我不确定这是正确的技术术语……),它总是一样的。 下图正是我想要的。我不想在按下列表的按钮旁边放置“一个”,而是希望打印“标题”(这不是列表的元素)。

重要的是,复选框是强制性的(这就是我使用 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();
}

【问题讨论】:

  • 我认为您需要创建自己的模型并实现headerData 成员函数。您需要的所有信息都在这里:qt-project.org/doc/qt-4.8/…
  • 您需要设置自定义视图以显示带有标题的下拉内容。
  • @DmitrySazonov 我不认为他指的是那个标题。我认为他希望组合框显示标题,而下拉列表显示没有标题的列表视图......无论如何,他想要什么都不清楚......
  • @luliu 他想要一个标题。很明显。您对 headerData 函数的评论是无用的。
  • 我试图在上面清楚地解释我想要什么。谢谢。

标签: c++ qt qcombobox


【解决方案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 一样进行所有自定义。

【讨论】:

  • 不,我删除了我的答案。这不是解决方案。我只是展示了如何使用颜色设置项目并推荐使用信号和插槽的脏技巧。对于 Qt 解决方案,您的答案很自然。我之前投了赞成票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2013-12-31
  • 2011-03-09
  • 2016-01-05
  • 2012-10-29
相关资源
最近更新 更多