gpt4 book ai didi

c++ - Qt:交换 QGraphicsRectItem 位置的最佳方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:18 27 4
gpt4 key购买 nike


我正在创建排序算法的可视化。我有一个 QGraphicsRectItems vector ,它们是在应用程序启动时生成的具有不同高度和相同宽度的列。它们被打乱,然后添加到 QGraphicsScene。名为“算法”的类对用于设置列高的浮点值 vector 进行排序。在交换时——它用两个整数向主类发出一个信号,所以它看起来像这样:

emit comparison(array[first element to swap], array[second element to swap]);

主类中的函数(on_comparison)与该信号相关联。当我试图交换这两个元素时出现了问题。我创建了一个变量来为其设置 n 列位置。之后我尝试设置列的位置,所以我做了类似的事情:

void on_comparision(int n, int k)
{
auto nColumnPos = columns[n]->pos().x();
columns[n]->setX(columns[k]->pos().x());
columns[k]->setX(nColumnPos);
}

但它不起作用。立场没有改变。此外

qDebug() <<nColumnPos; 

显示值 = 0。

我想知道我的整个程序是否有效,所以我决定实现 2 个排序算法,将 2 个相邻的元素交换,并将 on_comparison 函数修改为

columns[n]->setX(columns[n].pos().x() + columnsWidth);
columns[n]->setX(columns[n].pos().x() - columnsWidth);

它有效但没有给出令人满意的结果。此功能仅适用于交换 2 彼此附近元素的排序算法,例如。冒泡排序/鸡尾酒排序。

我一直在寻找答案,但没有找到任何有用的信息。


代码如下: https://gist.github.com/anonymous/e612e35a7c14eeb650099d4b997f437d


最佳答案

我已经设法解决了这个问题。 on_comparision 函数应如下所示:

auto nRect = columns[n]->rect();
auto kRect = columns[k]->rect();
auto nColumnPos = nRect.left();
auto kColumnPos = kRect.left();

nRect.moveLeft(kColumnPos);
kRect.moveLeft(nColumnPos);

columns[n]->setRect(nRect);
columns[k]->setRect(kRect);
std::swap(columns[n], columns[k]);

代替

auto nColumnPos = columns[n]->pos().x();
columns[n]->setX(columns[k]->pos().x());
columns[k]->setX(nColumnPos);
std::swap(columns[n], columns[k]);

关于c++ - Qt:交换 QGraphicsRectItem 位置的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47475882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com