如何选择QTableView的特定整个列

时间:2019-02-06 20:40:24

标签: c++ qt5

我有一个包含三列的QTableView,如下例所示:

| 编号 | 名称 | ACoord |

无论我仅在ACoord中单击哪个单元格,我都试图突出显示整个“ ACoord”列。

我尝试了几个示例,但没有任何帮助。 最有前途的(也来自官方QT文档)似乎是setSelectionBehavior(QAbstractItemView::SelectColumns),但并不能完全满足我的需要。

以下是代码段:

connect(mTurnIntoExcelData, &QAction::triggered, [&]() {
        int row = -1, column = -1;
        QString reference;
        QString type;
        QModelIndex index;
        int rowModel = index.row();
        SelectionData currentData;

        for(int i = 0; i < ui->tableViewLeft->model()->columnCount(); i++)
        {
          if(ui->tableViewLeft->model()->headerData(i, Qt::Horizontal).toString() == "ACoord") {
              column = i;
              ui->tableViewLeft->setSelectionBehavior(QAbstractItemView::SelectColumns);
              ui->tableViewLeft->setSelectionMode(QAbstractItemView::SingleSelection);
              type = "ACoord";
      }

预期结果是:单击ACoord的任何单元格,整个列将变为可选。

但是,实际结果是,如果我单击ACoord列的任何单元格,则无法选择整个列,而只能选择单个单元格。

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最优雅的方法,但是通过修改Qt的“ FrozenColumn”示例程序(在$ QTDIR / qtbase /中),我能够(想要的是)获得想要的行为。示例/小工具/ itemviews / frozencolumn),方法如下:

freezetablewidget.h的{​​{1}}部分中添加以下声明:

private slots:

void currentColumnChanged(const QModelIndex &); void autoSelectMagicColumn(); 中,在顶部的includes部分中添加一个freezetablewidget.cpp,然后在#include <QTimer>方法的末尾添加以下几行:

FreezeTableWidget::init()

...,最后,将以下新行添加到connect(frozenTableView->selectionModel(), SIGNAL(currentColumnChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(currentColumnChanged(const QModelIndex &))); connect(frozenTableView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(currentColumnChanged(const QModelIndex &))); // optional 中:

freezetablewidget.cpp

通过上述更改,每当我单击该列中的任何单元格(或通过箭头键导航到该列中的任何单元格)时,FrozenColumn示例应用程序都会自动选择整个“ YDS”列。也许您可以在程序中做类似的事情。