Qt - 如何从64开始设置QTableWidget行索引而不是从0开始?

时间:2012-10-23 07:35:57

标签: qt4 qtablewidget qt4.7 qt4.8 qmodelindex

我有128个项目的结构向量。我应该将前64个项目放到第一个QTableWidget中,将其余64个项目放到第二个QTableWidget 中。必须在我的结构向量中显示“index”数字。那些是Id号码。我使用UI设计器设计了我的ui,我尝试在那里更改QTableWidget第一行号,但它没有用。 如何初始化索引以0开头的第一个tablewidget以及索引从64开始的第二个tablewidget 。请帮助guyz ...先谢谢。


请帮助我解决这个问题。

我将使用快照图像清楚地解释它。 !这里我有 2个QTableWidgets。每个表格小部件都以行ID为1 开头。 Second Widget的Row id不应与1相同。而不是它必须是65 。 (因为我有128个项目,前64个项目进入第一个表格,其余64个项目应放在第二个表格中)。希望大家都明白我的要求。请帮我。 enter image description here

1 个答案:

答案 0 :(得分:5)

如果问题与垂直标题标签有关,那么在QTableWidget中更改它们的最简单方法是使用QTableWidget::setVerticalHeaderLabels()

#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QAbstractItemModel>

#define COL_NUM 2
#define ROW_NUM 5

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QTableWidget table(ROW_NUM, COL_NUM);
    QAbstractItemModel *model = table.model();
    QStringList labels;
    for (int i = 0; i < ROW_NUM; ++i) {
        /* Fill the row */
        for (int j = 0; j < COL_NUM; ++j) {
            QTableWidgetItem *item =
                new QTableWidgetItem(QString("item %1     %2").arg(i).arg(j));
            table.setItem(i, j, item);
        }
        /* Get row's vertical header label */
        QVariant data = model->headerData(i, Qt::Vertical);
        labels << QString("%1").arg(data.toInt() + 64);
        /* Apparently, two lines above can be replaced with one below */
        // labels << QString("%1").arg(65 + i);
    }
    /* Update vertical header labels */
    table.setVerticalHeaderLabels(labels);
    table.show();

    return app.exec();
}

QTableWidget API更简单,但功能有限。例如,QAbstractItemModel::setHeaderData()不是操作,不会在QTableModel中重新实现。替代方法是使用QTableViewQAbstractItemView来保存数据。正如您所说,您已经在某种结构中分别拥有数据,因此您可以对结构进行子类化,并QAbstractItemView生成您的自定义模型,以便QTableView显示。