Qt 编程点滴9
2012-10-12 09:23
246 查看
QString怎么转换成char
调用 Q_DECLARE_METATYPE 报以下错
如果报以上相类似的错误,请对构造函数中的每个参数赋初值,下面的写法是错误的
正确的写法应为:
如果程序莫名奇妙的退出,也不报DLL找不到的错误,请仔细检查Main函数体有没直接Return的语句,以造成不提示,直接退出的错误;
在Qt中计算文本的宽度与高度 ( http://www.cuteqt.com/blog/?p=1029 )
产生此错误的原因:
互斥用法:
自定义事件方法:
触发事件:
绑定事件方法:
自定义宏的用法:
QString str ="123456"; str.toAscii().data(); //this return a char* or const char* str.toAscii() return a QByteArray QString Str; //Str = "asdfasdfasdf"; Str->toString().c_str();
调用 Q_DECLARE_METATYPE 报以下错
..\..\..\..\Qt\src\corelib\kernel\qmetatype.h||In function \\\'void* qMetaTypeConstructHelper(const T*) [with T = ContactsInfoTabItemData]\\\':| ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|152|instantiated from \\\'int qRegisterMetaType(const char*, T*) [with T = ContactsInfoTabItemData]\\\'| src\contactsinfotabitemdata.h|62|instantiated from here| ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|126|error: no matching function for call to \\\'ContactsInfoTabItemData::ContactsInfoTabItemData()\\\'|
如果报以上相类似的错误,请对构造函数中的每个参数赋初值,下面的写法是错误的
class ContactsInfoTabItemData { public: ContactsInfoTabItemData(QString name,QString caption); }; Q_DECLARE_METATYPE(ContactsInfoTabItemData);
正确的写法应为:
class ContactsInfoTabItemData { public: ContactsInfoTabItemData(QString name=QString(),QString caption=QString()); }; Q_DECLARE_METATYPE(ContactsInfoTabItemData);
如果程序莫名奇妙的退出,也不报DLL找不到的错误,请仔细检查Main函数体有没直接Return的语句,以造成不提示,直接退出的错误;
在Qt中计算文本的宽度与高度 ( http://www.cuteqt.com/blog/?p=1029 )
error: incomplete type %u2018nsIDOMComment%u2019 used in nested name specifier
产生此错误的原因:
g++ gives this message if you\\\'ve forward-declared a type, like this class MyClass; and then you try and access one of its members, like maybe: MyClass::doSomething() g++ is complaining that it hasn\\\'t seen the body of class MyClass yet, so it has no way to know what MyClass::doSomething is. (In C++ jargon, an "incomplete type" is a type that\\\'s been forward-declared but not yet defined.)
互斥用法:
QMutex mutex; void GlobalVar::setUserInfo(const GlobalVar::UserInfo &userInfo) { QMutexLocker locker(&mutex); this->userinfo = userInfo; }
自定义事件方法:
a.h: #include "event.h" typedef void ( EventDelegater::*SetWidgetParent )(QWidget*,QString ); class test { public: Event OnSetWidgetParent; private: inline void invokeSetWidgetParent(QWidget *parentWidget,QString widgetName); }; a.cpp: inline void test::invokeSetWidgetParent(QWidget *parentWidget,QString widgetName) { if ( !OnSetWidgetParent.m_EventList.empty() ) { // 循环事件列表 Event< SetWidgetParent >::EventIterator iter; for ( iter = OnSetWidgetParent.m_EventList.begin(); iter != OnSetWidgetParent.m_EventList.end(); ++iter ) { // 调用事件 InvokeEvent( parentWidget, widgetName ); } } }
触发事件:
invokeSetWidgetParent(NULL,QString());
绑定事件方法:
test->OnSetWidgetParent.Bind(this, &MainWindow::setWidgetParent);
自定义宏的用法:
*.pro DEBUGSAVETOFILE = 1 isEmpty(DEBUGSAVETOFILE){ win32:debug { CONFIG += console } } else{ DEFINES += __DEBUGSAVETOFILE__ } main.cpp: #ifdef __DEBUGSAVETOFILE__ #pragma message( "__DEBUGSAVETOFILE__ is defined.") qInstallMsgHandler( messageOutput ); #else #pragma message("win32:debug is defined.") #endif