Почему делает QGraphicsItem:: scenePos () продолжают возвращаться (0,0)

Вы никогда не должны просто входить в систему и начинать вводить команды "ALTER TABLE" для изменения производственной базы данных. Проект я иду, имеет базу данных по каждому сайту для клиентов, и таким образом, каждое изменение в базе данных внесено в двух местах, файл дампа, который используется для создания новой базы данных по новому сайту для клиентов и файла обновления, который выполняется на каждом обновлении, которое проверяет текущий номер версии базы данных по самому большому количеству в файле и обновляет базу данных на месте. Так, например, последние обновления:

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

я уверен, что существует лучший способ сделать это, но он работал на меня до сих пор.

7
задан Angie Quijano 20 April 2016 в 00:38
поделиться

1 ответ

Внимательно прочитав документацию QT 4.5 на addLine , я понял, что делал неправильно. Согласно документу:

Обратите внимание, что геометрия объекта предоставляется в координатах элемента, а его position инициализируется значением (0, 0)

Поэтому, если я указываю addLine (50,50, 100, 100), я фактически изменяю координату его локального элемента. Предположение, которое я сделал, что это будет рассматриваться как координата сцены, неверно или необоснованно. Что мне нужно сделать, это

// Create a line of length 100
QGraphicsItem * anotherLine = addLine(0,0, 100, 100); 

// move it to where I want it to be within the scene
anotherLine->setPos(50,50);

Итак, если я добавляю линию, рисуя внутри сцены, мне нужно сбросить ее центр на (0,0), а затем использовать setPos (), чтобы переместить ее туда, где я хочу. в сцене.

Надеюсь, это поможет любому, кто наткнется на ту же проблему.

18
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: