Qtableview 中的 QStandardItemModel

Posted

技术标签:

【中文标题】Qtableview 中的 QStandardItemModel【英文标题】:QStandardItemModel inside Qtableview 【发布时间】:2013-06-05 04:27:43 【问题描述】:

我在QTableView 中使用QStandardItemModel。在这里,我的主窗口中有两个按钮和Qtableview。 我只需要其中的 4 列。行会有所不同。这两个按钮将用于添加/删除一行(测试用例)。

    setHorizontalHeaderItem 没有显示所有文本(意味着所有文本都不可见)。例如,如果我输入'Text for the Employee Name' 它不是完全可见的? 如何让QStandardItemModel占满QTableview(width)。目前显示在左上角?

如何实现?

代码:

model= new QStandardItemModel(4, 4);

    for (int row = 0; row < 4; ++row) 
        for (int column = 0; column < 4; ++column) 
            QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
            model->setItem(row, column, item);
        
    

    model->setHorizontalHeaderItem(0, new QStandardItem(tr("Time")));
    model->setHorizontalHeaderItem(1, new QStandardItem(tr("Text for the Employee Name")));
    model->setHorizontalHeaderItem(2, new QStandardItem(tr("Text for the Employee Address")));
    model->setHorizontalHeaderItem(3, new QStandardItem(tr("Text for the Employee Date of Birth")));

    model->setVerticalHeaderItem(0, new QStandardItem(tr("Test-Case-----1")));

【问题讨论】:

【参考方案1】:
tableView->horizontalHeader()->setStretchLastSection(true);

tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

【讨论】:

【参考方案2】:

由于该问题已被接受,因此我的回答可能对某人有所帮助,因为上述接受的答案对我没有帮助。

QStandardItemModel *model = new QStandardItemModel(2,3,this);
//----------
ui->tableView->setModel(model);
ui->tableView->resizeColumnsToContents();

【讨论】:

这个答案不符合问题【参考方案3】:

我知道答案来的有点晚,但我只是需要做同样的事情,并想出一个不同的解决方案。

要在 Qt 4 中实现目标,您需要调整 QTableView 的标头设置。为此,首先检索标题:

QHeaderView *header = ui->tableView->horizontalHeader();

接下来,通过调用QHeaderView::setResizeMode(第二种风格,接受logicalIndex)调整各个列的大小调整模式:

header->setResizeMode(0, QHeaderView::ResizeToContents);
header->setResizeMode(1, QHeaderView::ResizeToContents);
header->setResizeMode(2, QHeaderView::ResizeToContents);
header->setResizeMode(3, QHeaderView::Stretch);

在上面的示例中,我选择拉伸第 3 列,但您可以选择任何一列处于“拉伸”模式。

在 Qt 5 中,您想要的调用是 QHeaderView::setSectionResizeMode()

希望这对您或其他任何寻求解决此问题的人有所帮助。

【讨论】:

以上是关于Qtableview 中的 QStandardItemModel的主要内容,如果未能解决你的问题,请参考以下文章

如何为 QTableView 中的单个单元格设置委托?

paint 清除 qtableview 中的数据

PyQt4中的QTableView选定元素

QT中的QtableWidget和QtableView使用有啥区别?

如何删除 QTableView 中的标题?

QTableView中的相等拉伸列[重复]