本文介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推荐本文。

Qt 编程继续为大家讲解,还是接着文章 Qt 编程点滴 初学者必看 (8),继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。

Qt 编程点滴 初学者必看 (9)(qt编程指南)  第1张

QString怎么转换成char

  1. QStringstr="123456";
  2. str.toAscii().data();//thisreturnachar*orconstchar*
  3. str.toAscii()returnaQByteArray
  4. QStringStr;//Str="asdfasdfasdf";
  5. Str->toString().c_str();

调用 Q_DECLARE_METATYPE 报以下错

  1. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h||Infunction\\\'void*qMetaTypeConstructHelper(constT*)[withT=ContactsInfoTabItemData]\\\':|
  2. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|152|instantiatedfrom\\\'intqRegisterMetaType(constchar*,T*)[withT=ContactsInfoTabItemData]\\\'|
  3. src\contactsinfotabitemdata.h|62|instantiatedfromhere|
  4. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|126|error:nomatchingfunctionforcallto\\\'ContactsInfoTabItemData::ContactsInfoTabItemData()\\\'|

如果报以上相类似的错误,请对构造函数中的每个参数赋初值,下面的写法是错误的

  1. classContactsInfoTabItemData
  2. {
  3. public:
  4. ContactsInfoTabItemData(QStringname,QStringcaption);
  5. };
  6. Q_DECLARE_METATYPE(ContactsInfoTabItemData);

正确的写法应为:

  1. classContactsInfoTabItemData
  2. {
  3. public:
  4. ContactsInfoTabItemData(QStringname=QString(),QStringcaption=QString());
  5. };
  6. Q_DECLARE_METATYPE(ContactsInfoTabItemData);

如果程序莫名奇妙的退出,也不报DLL找不到的错误,请仔细检查Main函数体有没直接Return的语句,以造成不提示,直接退出的错误;

在Qt中计算文本的宽度与高度( http://www.cuteQt.com/blog/?p=1029)

  1. error:incompletetype%u2018nsIDOMComment%u2019usedinnestednamespecifier

产生此错误的原因:

  1. g++givesthismessageifyou\\\'veforward-declaredatype,likethis
  2. classMyClass;
  3. andthenyoutryandaccessoneofitsmembers,likemaybe:
  4. MyClass::doSomething()
  5. g++iscomplainingthatithasn\\\'tseenthebodyofclassMyClassyet,soithasnowaytoknowwhatMyClass::doSomethingis.
  6. (InC++jargon,an"incompletetype"isatypethat\\\'sbeenforward-declaredbutnotyetdefined.)

互斥用法:

  1. QMutexmutex;
  2. voidGlobalVar::setUserInfo(constGlobalVar::UserInfo&userInfo)
  3. {
  4. QMutexLockerlocker(&mutex);
  5. this->userinfo=userInfo;
  6. }

自定义事件方法:

  1. a.h:
  2. #include"event.h"
  3. typedefvoid(EventDelegater::*SetWidgetParent)(QWidget*,QString);
  4. classtest
  5. {
  6. public:
  7. EventOnSetWidgetParent;
  8. private:
  9. inlinevoidinvokeSetWidgetParent(QWidget*parentWidget,QStringwidgetName);
  10. };
  11. a.cpp:
  12. inlinevoidtest::invokeSetWidgetParent(QWidget*parentWidget,QStringwidgetName)
  13. {
  14. if(!OnSetWidgetParent.m_EventList.empty())
  15. {
  16. //循环事件列表
  17. Event<SetWidgetParent>::EventIteratoriter;
  18. for(iter=OnSetWidgetParent.m_EventList.begin();
  19. iter!=OnSetWidgetParent.m_EventList.end();
  20. ++iter)
  21. {
  22. //调用事件
  23. InvokeEvent(parentWidget,widgetName);
  24. }
  25. }
  26. }

触发事件:

  1. invokeSetWidgetParent(NULL,QString());

绑定事件方法:

  1. test->OnSetWidgetParent.Bind(this,&MainWindow::setWidgetParent);


自定义宏的用法:

  1. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h||Infunction\\\'void*qMetaTypeConstructHelper(constT*)[withT=ContactsInfoTabItemData]\\\':|
  2. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|152|instantiatedfrom\\\'intqRegisterMetaType(constchar*,T*)[withT=ContactsInfoTabItemData]\\\'|
  3. src\contactsinfotabitemdata.h|62|instantiatedfromhere|
  4. ..\..\..\..\Qt\src\corelib\kernel\qmetatype.h|126|error:nomatchingfunctionforcallto\\\'ContactsInfoTabItemData::ContactsInfoTabItemData()\\\'|
0

小结:本文主要介绍了在Qt 事件的使用,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。

转载请说明出处
知优网 » Qt 编程点滴 初学者必看 (9)(qt编程指南)

发表评论

您需要后才能发表评论