Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


etc:blog:q_multi_hash_map_qsharedpointer

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
etc:blog:q_multi_hash_map_qsharedpointer [2011/01/27 21:14] voodetc:blog:q_multi_hash_map_qsharedpointer [2011/01/27 21:30] (current) kkv
Line 1: Line 1:
-====== QMultiMap+QSharedPointer ======+====== Решение проблемы QMultiMap QSharedPointer в Qt 4.6 ======
  
  
Line 5: Line 5:
 ==== Введение ==== ==== Введение ====
 Библиотека Qt предоставляет множество удобных средств для разработки приложений, например api для взаимодействия с мобильными платформами или набор классов для GUI программ. В данной статье речь пойдет об одной не совсем очевидной особенности совместного использования таких классов как QMultiMap и QSharedPointer. В качестве среды используется Ubuntu 10.04 с установленным Qt 4.6 . Библиотека Qt предоставляет множество удобных средств для разработки приложений, например api для взаимодействия с мобильными платформами или набор классов для GUI программ. В данной статье речь пойдет об одной не совсем очевидной особенности совместного использования таких классов как QMultiMap и QSharedPointer. В качестве среды используется Ubuntu 10.04 с установленным Qt 4.6 .
- 
- 
- 
- 
- 
- 
  
  
Line 96: Line 90:
 из-за которой и происходит сбой компиляции. Вот так выглядит ее прототип в документации Qt [[http://doc.qt.nokia.com/4.6/qmap.html#uniqueKeys|uniqueKeys]] : из-за которой и происходит сбой компиляции. Вот так выглядит ее прототип в документации Qt [[http://doc.qt.nokia.com/4.6/qmap.html#uniqueKeys|uniqueKeys]] :
 <code text>QList<Key> QMap::uniqueKeys () const</code> <code text>QList<Key> QMap::uniqueKeys () const</code>
 +
 Очевидно, что возвращаемые значения в обоих случаях не совпадают и нам удалось повторить ошибку на более простом примере. \\ Очевидно, что возвращаемые значения в обоих случаях не совпадают и нам удалось повторить ошибку на более простом примере. \\
 Обратимся к описанию данной функции. Исходя из документации она возвращает список всех ключей в QMultiMap в порядке возрастания. Логично предположить, что основная проблема заключается в сортировке полученного списка ключей, ввиду отсутствия оператора сравнения определенного для типа QSharedPointer<T> Обратимся к описанию данной функции. Исходя из документации она возвращает список всех ключей в QMultiMap в порядке возрастания. Логично предположить, что основная проблема заключается в сортировке полученного списка ключей, ввиду отсутствия оператора сравнения определенного для типа QSharedPointer<T>
 Определим свой оператор сравнения следующим образом: Определим свой оператор сравнения следующим образом:
 +
 <code c++> <code c++>
 template <class T> template <class T>
Line 105: Line 101:
 } }
 </code> </code>
 +
 Если включить код данного оператора в код примера, то компиляция пройдет нормально и мы получим работающее приложение. Если включить код данного оператора в код примера, то компиляция пройдет нормально и мы получим работающее приложение.
  
Line 115: Line 112:
  
 ==== Заключение ==== ==== Заключение ====
 +
 Очевидно, что перегрузка оператора "<" для типа QSharedPointer<T> также следует и из сообщений компилятора. А это показывает, что написание простого примера ошибки в большом приложении позволяет весьма тривиальным образом найти ее причины. Очевидно, что перегрузка оператора "<" для типа QSharedPointer<T> также следует и из сообщений компилятора. А это показывает, что написание простого примера ошибки в большом приложении позволяет весьма тривиальным образом найти ее причины.
 Описанная проблема устранена в новой версии Qt 4.7, которая входит в состав Qt SDK 1.1. Однако предложенное здесь решение остается актуальным, так как на момент написания статьи в OVI находится  Qt 4.6. Описанная проблема устранена в новой версии Qt 4.7, которая входит в состав Qt SDK 1.1. Однако предложенное здесь решение остается актуальным, так как на момент написания статьи в OVI находится  Qt 4.6.
  
-{{tag>}}+{{tag>qt ovi QMultiMap QSharedPointer}}
  
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  
etc/blog/q_multi_hash_map_qsharedpointer.txt · Last modified: 2011/01/27 21:30 by kkv