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 revision Previous revision
etc:blog:q_multi_hash_map_qsharedpointer [2011/01/27 21:14]
vood
etc: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