您的位置:首页 > 编程语言 > Qt开发

Qt 编程点滴9

2012-10-12 09:23 246 查看
QString怎么转换成char

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: