Вы никогда не должны просто входить в систему и начинать вводить команды "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
я уверен, что существует лучший способ сделать это, но он работал на меня до сих пор.
Внимательно прочитав документацию 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 (), чтобы переместить ее туда, где я хочу. в сцене.
Надеюсь, это поможет любому, кто наткнется на ту же проблему.