图元指针数组移动产生的问题



  • #define WAIT_A_MINUTE_2 \
        while (isPause) \
        { \
            if (isReset) \
                return; \
            QTest::qWait(10); \
        } \
        QTest::qWait(speed);
    
    int number[15];
    RectItem *rect[15];
    
    void startSort()
        {
            isPause = false;
            isReset = false;
    
            RectItem *item;
            int temp;
            int j;
    
            WAIT_A_MINUTE_2
            rect[0]->setItemColor(RectItem::CYAN);
    
            for (int i = 1; i < n; i++)
            {
                WAIT_A_MINUTE_2
                rect[i]->setItemColor(RectItem::RED);
                rect[i]->setPos(QPoint(0, dropDistance));
    
                item = rect[i];
                temp = number[i];
                j = i - 1;
    
                while (j >= 0 && number[j] > temp)
                {
                    WAIT_A_MINUTE_2
                    item->setPos(QPoint(-75, 0));
                    rect[j]->setPos(QPoint(75, 0));
    
                    number[j + 1] = number[j];
                    rect[j + 1] = rect[j];
                    j--;
                }
    
                WAIT_A_MINUTE_2
                item->setPos(QPoint(0, -dropDistance));
                item->setItemColor(RectItem::CYAN);
    
                number[j + 1] = temp;
                rect[j + 1] = item;
            }
    
            emit finished();
        }
    

    这段代码想实现的效果是:https://visualgo.net/en/sorting 其中的insert_sort。

    根据这段代码我实现的却是这样:

    0_1515572277115_12000000.gif

    我检查好久了,就是找不出哪里错了,插排的代码逻辑没错啊,看着错误好像是指针数组错了,但是我检查不出哪里有问题。



  • 已解决,setPos不会改变图元坐标。



  • 最好使用C++风格,数组这个东西除非必要尽量不用的


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.