QTableView 动画行隐藏

Posted

技术标签:

【中文标题】QTableView 动画行隐藏【英文标题】:QTableView animate row hiding 【发布时间】:2017-07-23 11:59:49 【问题描述】:

hideRow() 使行立即消失,我想要平滑过渡,一些淡入淡出效果。

这可能吗?我在文档中找不到任何参考。

【问题讨论】:

【参考方案1】:

您可能可以通过使用QTableView::setRowHeightQTimer 来获得。

/*
 * Get QTableView pointer and index of the row to hide from
 * somewhere.
 */
QTableView *tv = ...;
int row = ...;

/*
 * Create a timer.  It will be deleted by our lambda when no
 * longer needed so no memory leak.
 */
auto *timer = new QTimer;

/*
 * Connect the timer's timeout signal to a lambda that will
 * do the work.
 */
connect(timer, &QTimer::timeout,
        [=]()
        
          int height = tv->rowHeight(row);
          if (height == 0) 

            /*
             * If the row height is already zero then hide the
             * row and delete the timer.
             */
            tv->setRowHidden(row, true);
            timer->deleteLater();
           else 

            /*
             * Otherwise, decrease the height of the row by a
             * suitable amount -- 1 pixel in this case.
             */
            tv->setRowHeight(row, height - 1);
          
        );

/*
 * Start the timer running at 10Hz.
 */
timer->start(100);

请注意,以上代码未经测试。此外,与其创建一个“空灵”QTimer,不如将​​其设为视图类的成员变量或其他任何东西。

【讨论】:

我有同样的想法,但我认为可能有一些更方便的方法。我将对此进行测试并报告。谢谢 它有效。虽然整个事情看起来像一个黑客。我想使用合适的动画框架,但是……就是这样。

以上是关于QTableView 动画行隐藏的主要内容,如果未能解决你的问题,请参考以下文章

QTableView和QTableWidget翻页功能实现

如何在 QTableView 中应用过滤器后显示特定行

QTableView 将小部件缩小到内容

qtableview 无法显示新插入的行

QTableView 列控件,方便显示/隐藏列

QTableView 将视图重新聚焦到特定列