сортировка элементов Сцены |
Здравствуйте, гость ( Вход | Регистрация )
сортировка элементов Сцены |
genusatplay |
11.12.2008, 14:32
Сообщение
#1
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
народ помогите плиз советом..
у меня есть QGraphicScene на котором я создаю (class DiagramItem : public QGraphicsPolygonItem) в диаграм итеме храниться полигон и инфа(параметры) я подобавлял на форму итемов, поредактил их терь нада все сохранить в файл xml.. но вот в чем проблема.. итемы добавлялись в сцену в произвольном порядке.. мне нужно отсортировать их слева направа сверху вниз по их координатам x,y относительно полотна а потом выгрузить в файл и еще отнимать от Элемент_списка.x Предыдуший_элемент.x чтоб в итоге получать в шаблоне отступ относительно предыдущего элемента. мб есть какиенибудь стандартные фичи для такой сортировки? если нет.. подскажите как мне это сделать? |
|
|
ViGOur |
11.12.2008, 19:03
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Для стандартной сортировки моешь посмотреть: qSort или QStableSort.
Но не уверен, что в твоем случае это может помочь, я думаю тебе нужно самому писать сортировку для входящего объекта структуры: и уже в ней менять nDiff.
|
|
|
genusatplay |
12.12.2008, 12:09
Сообщение
#3
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
чтото типа такого надо..
на код такой не ругается, но он и неработает
|
|
|
ViGOur |
12.12.2008, 13:08
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Ты когда-нибудь сортировку реализовавыл сам руками? Это чисто для информации, чтобы знать...
Где ты данный код выполняешь? Как вызываешь? |
|
|
genusatplay |
12.12.2008, 22:35
Сообщение
#5
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ты когда-нибудь сортировку реализовавыл сам руками? Это чисто для информации, чтобы знать... Где ты данный код выполняешь? Как вызываешь? этот код выполняется в слоте сохранения шаблона в mainwindow'е моем, после сортировки идет выгрузка в xml вызываю при срабатывании действия сохранения в меню да писал, у меня самый любимый способ сортировки такой: Раскрывающийся текст // Language C# using System; using System.Collections.Generic; using System.Text; using System.Globalization; using System.Threading; namespace laba { class Program { static void Main(string[] args) { int buf; int i,j,n; Boolean qwe; qwe = true; Console.WriteLine("Введите размерность массива"); n = int.Parse(Console.ReadLine()); int[] a = new int[n]; for (i = 0; i < n; i++) { Console.WriteLine("Введите {0:d} элемент массива", i); a[i] = int.Parse(Console.ReadLine()); } Console.WriteLine("---------"); for (int k = 0; k < a.Length; k++) { Console.WriteLine(a[k]); } Console.WriteLine("---------"); DateTime dtb = DateTime.Now; //datetime before CultureInfo ci = new CultureInfo("de-DE"); while (qwe) { Random randObj = new Random(); i = randObj.Next(a.Length); j = randObj.Next(a.Length); buf = a[j]; a[j] = a[i]; a[i] = buf; int f = 0; for (int h = 0; h < a.Length - 1; h++) { if (a[h] > a[h + 1]) { f = f + 1; } } if (f > 0 ) { qwe = true;} else { qwe = false; } } DateTime dta = DateTime.Now; //datetime after DateTime time = DateTime.Now; long vrema; //time = dta.Millisecond - dtb.Millisecond; Console.WriteLine("Время работы программы {0:d} миллисекнуд.",vrema.ToString()); Console.WriteLine(vrema.ToString()); Console.WriteLine(time.ToString("d", ci)); for (int k = 0; k < a.Length; k++) { Console.WriteLine(a[k]); } Console.ReadKey(); } } } когда сдавал эту лабу, преподавателю понравился метод.. Сообщение отредактировал genusatplay - 12.12.2008, 22:38 |
|
|
Litkevich Yuriy |
12.12.2008, 22:56
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
genusatplay |
12.12.2008, 23:10
Сообщение
#7
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
то что после его выплнения выгрузка в xml идет последовательно от 1ого элемента QGraphicsScene до последнего, и после выгрузки я получаю резултьтат
те выгружается в том порядке в котором я элементы заносил, а должно было: сначала элемент text02 потом text01
а можно какнить отсортировать Qlist<sCrd> qSort'ом просто определив ему чтоб он сортировал по nY? Сообщение отредактировал genusatplay - 12.12.2008, 23:11 |
|
|
Litkevich Yuriy |
12.12.2008, 23:11
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
genusatplay, давай еще раз про сортировку, без выгрузки в XML (как говорится "мухи отдельно, котлеты отдельно")
Есть декартова плоскость, на ней точки с координатами X,Y. По какой траектории обходится декартова плоскость? 1) слева на право, затем сверху в низ; 2) сверху в низ, затем слева на право; или как-то еще? |
|
|
genusatplay |
12.12.2008, 23:30
Сообщение
#9
|
Студент Группа: Участник Сообщений: 50 Регистрация: 8.11.2008 Пользователь №: 416 Спасибо сказали: 0 раз(а) Репутация: 0 |
мне впринципе слева направо пока ненадо..
сверху вниз и того хватит =) те сортировка ток по Y , чтоб самый толстый в конце был |
|
|
Litkevich Yuriy |
13.12.2008, 0:00
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
тогда яб так сделал:
взял QMap <int, DiagramItem*> где int - координата по Y, напихал бы в цикле в него элементы, а потом бы стал их вынимать по одному (их QMap по ключу сам отсортирует) и писать в XML. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 10:16 |