title: QVariant with std::shared_ptr
body: <p>i have the following problem, i am using</p>
  
  <pre><code>Q_DECLARE_METATYPE( std::shared_ptr&lt;int&gt; );
  qRegisterMetaType&lt; std::shared_ptr&lt;int&gt; &gt;();
  QMetaType::registerComparators&lt; std::shared_ptr&lt;int&gt; &gt;();
  </code></pre>
  
  <p>to use <code>std::shared_ptr&lt;int&gt;</code> with e.g. QListModel. 
  I need a behavior where</p>
  
  <pre><code>QVariant::fromValue( std::shared_ptr&lt;int&gt;( new int(5) ) ) == QVariant::fromValue( std::shared_ptr&lt;int&gt;( new int(5) ) )
  </code></pre>
  
  <p>is true. My code above return false here since <code>std::shared_ptr&lt;int&gt;::operator== ()</code> compares the raw pointers. is it possible to register comparators other than the standard operators in <code>QMetaType::registerComparators</code>?</p>