1

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

  1. setHorizontalHeaderItem没有显示所有文本(意味着所有文本都不可见)。例如,如果我把'Text for the Employee Name'它不完全可见?
  2. 如何使QStandardItemModel占满QTableviewwidth)。目前它显示在左上角?

如何实现?

代码 :

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

在此处输入图像描述

4

3 回答 3

4
tableView->horizontalHeader()->setStretchLastSection(true);

或者

tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
于 2013-06-05T06:04:13.517 回答
1

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

QStandardItemModel *model = new QStandardItemModel(2,3,this);
//----------
ui->tableView->setModel(model);
ui->tableView->resizeColumnsToContents();
于 2015-04-10T04:27:58.717 回答
0

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

要在 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().

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

于 2018-02-05T05:56:56.497 回答