
Originally Posted by
jpn
qRegisterMetaType<ClassA*>("ClassA*");
qRegisterMetaType<ClassA*>("ClassA*");
To copy to clipboard, switch view to plain text mode
Thanks.
Then how can I construct the object as:
ClassA* a = static_cast<ClassA*>( obj );
int id = QMetaType::type("ClassA") or QMetaType::type("ClassA*");
void* obj = QMetaType::construct( id );
ClassA* a = static_cast<ClassA*>( obj );
To copy to clipboard, switch view to plain text mode
My ClassA doesn't have copy constructor (disabled).
I have tried the follow codes, the copy constructor or operator= are never called, why copy constructor are required here? Thank you!
class MyStruct {
public:
MyStruct();
MyStruct( const MyStruct& );
MyStruct& operator=( const MyStruct& );
};
MyStruct::MyStruct()
{
std::cout << "In constructor" << std::endl;
}
MyStruct::MyStruct( const MyStruct& org )
{
std::cout << "In copy constructor" << std::endl;
}
MyStruct& MyStruct::operator=( const MyStruct& rhs )
{
std::cout << "operator=" << std::endl;
return *this;
}
int main()
{
qRegisterMetaType<MyStruct>( "MyStruct" );
}
class MyStruct {
public:
MyStruct();
MyStruct( const MyStruct& );
MyStruct& operator=( const MyStruct& );
};
MyStruct::MyStruct()
{
std::cout << "In constructor" << std::endl;
}
MyStruct::MyStruct( const MyStruct& org )
{
std::cout << "In copy constructor" << std::endl;
}
MyStruct& MyStruct::operator=( const MyStruct& rhs )
{
std::cout << "operator=" << std::endl;
return *this;
}
int main()
{
qRegisterMetaType<MyStruct>( "MyStruct" );
int id = QMetaType::type("MyStruct");
void* obj = QMetaType::construct( id );
}
To copy to clipboard, switch view to plain text mode
Bookmarks