QT QTableWidget 只有某一列(某几列)可以点击排序,可显示箭头

    在开发中,有个一需求,一个QTableWidget表格,表头只允许一行可以点击排序,并只有这一行可以显示上下箭头(排序)。

    如下图,只有质检状态可以点击排序,并显示上面的箭头。



    这个时候我们该怎么做呢?查帮助文档吧,帮助文档确实有可以实现点击表头可以排序并显示排序的箭头的。

void setSortIndicatorShown(bool show)

    当show为ture的时候,就可以实现可以点击表头实现排序。但是有个问题:这个函数是对所有列有效的,就是说,你点击任何一列的时候,都可以实现排序(显示箭头)。和我们的需求有点不太一样,怎么办,继续找方法吧。

    这时候我们发现一个信号

[signal] void QHeaderView::sectionClicked(int logicalIndex)

    也就是说当我们鼠标点击表头的时候,是会出发这个信号的,其中logicalIndex为点击的第几列,这样我们就有了思路:

1.我们连接点击表头点击的信号到我们自定义的一个槽函数

    connect(ui->tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(slotHeaderClicked(int)));

2.在槽函数里我们来判断,点击的是第几列的表头。当我们发现点击的是我们想要的排序的列的时候,我们就可以设置刚开始我们找到的setSortIndicatorShown(true),然后设置箭头的方向,再排序。如果点击的不是我们想要的那一列,就setSortIndicatorShown(false),然后直接return就可以了。

void TableForm::slotHeaderClicked(int index)
{
    if (index != 6)
    {
        //不是我们想要的那一列
        ui->tableWidget->horizontalHeader()->setSortIndicatorShown(false);
        return;
    }

    static bool bSortAsc = true;

    Qt::SortOrder order = bSortAsc ? (Qt::AscendingOrder) : (Qt::DescendingOrder);
    ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true);
    ui->tableWidget->horizontalHeader()->setSortIndicator(index, order);

    QString strSort = bSortAsc ? "asc" : "desc";
    requestQcList(m_nCurrentPageIndex, strSort);

    bSortAsc = !bSortAsc;

}


猜你喜欢

转载自blog.csdn.net/xiezhongyuan07/article/details/80021217
今日推荐