使tableview的列符合其内容的大小

时间:2013-11-17 06:05:33

标签: c++ qt

我目前有一个看起来像这样的桌面视图

enter image description here

正如您所看到的,只有第3列是正确的宽度,而第1列和第2列更大。有没有什么方法可以使列适合内容或明确地使第1列和第二列更小。我试过做tableView->resizeColumnsToContents();,但没有区别。有什么建议吗?

这是我的代码

void Test::AddEntry()
{
    QImage myimg;//(":/Test/Images/add.png");
    QStandardItem* item_avtr  =  new QStandardItem();
    item_avtr->setData( QPixmap::fromImage( myimg ), Qt::DecorationRole ) ;

    QStandardItem* item_aonline  =  new QStandardItem();
    item_aonline->setText("hello");

    QStandardItem* item_name  =  new QStandardItem("Name");


    QList<QStandardItem*> lst ;
    lst.push_back(item_avtr);
    lst.push_back(item_aonline);
    lst.push_back(item_name);

    ModelOptions->appendRow(lst);

}

模型就像这样启动

    ModelOptions =new QStandardItemModel();
ui.tableView->setModel(ModelOptions);
QStringList labels;

labels.push_back("col1");
labels.push_back("col2");
labels.push_back("col3");
ModelOptions->setHorizontalHeaderLabels(labels); 
ui.tableView->horizontalHeader()->setVisible(false);
ui.tableView->verticalHeader()->setVisible(false);
ui.tableView->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
ui.tableView->resizeColumnsToContents();
ui.tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
AddEntry();

2 个答案:

答案 0 :(得分:1)

  • resizeColumnsToContents()只会调整列的大小一次,具体取决于表格的当前数据。因此,每次更改数据时都应该调用它,即在AddEntry()结束时调用它。表中包含但当前未在视口中显示的数据受到尊重。

  • resizeColumnsToContents()将horizo​​ntalHeaders的宽度考虑在内,即使它们设置为不可见。它们是否真的在您的代码中命名为“col1”,“col2”和“col3”?

答案 1 :(得分:0)

ui.tableView-&GT; horizo​​ntalHeader() - &GT; setResizeMode(QHeaderView :: ResizeToContents)

QHeaderView会根据整个列或行的内容自动将该部分的大小调整为最佳大小。用户无法或以编程方式更改大小。 (这个值是在4.2中引入的)