qt中bind函数(qtbinding)
Qt图形界面程序如何调用fortran编写的控制
Qt是基于C++接口的界面库。
C++可以用 extern "C" {} 声明 C 接口的函数。
比如
extern "C" {
void testCallFortran( int z, double * rr, int e);
}
Fortran 可以用 ISO_C_Binding 进行 C 接口捆绑。
比如
Subroutine callByC( z , rr, e ) Bind( C , Name="testCallFortran")
integer , value :: z , e
Real(Kind=C_DOUBLE) :: rr
End Subroutine callByC
Qt udp 绑定bind失败
//bool tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port );//失败 没指定 是IPV4还是IPV6
//? ? QString string("192.168.112.10");
//? ? QHostAddress address(QHostAddress::LocalHost);//QHostAddress::Any
//? ? bool tf =address.setAddress( string );
//? ? tf =m_pSocket-bind(address,m_port );//失败
//? ? quint32 ip4Add = 19224|16816|1128|10;
//? ? QHostAddress address(QHostAddress::Any);//QHostAddress::LocalHost
//? ? address.setAddress( ip4Add );
//? ? bool tf =m_pSocket-bind(address,m_port );//失败
? ? //quint32 ip4Add = 19224|16816|1128|100;
? ? //bool tf =m_pSocket-bind(QHostAddress(ip4Add),m_port,QAbstractSocket::ShareAddress );
? ? //tf =m_pSocket-bind(QHostAddress(ip4Add),m_port,QAbstractSocket::ReuseAddressHint| QAbstractSocket::ShareAddress | QAbstractSocket::DontShareAddress );
? ? //tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::ReuseAddressHint| QAbstractSocket::ShareAddress | QAbstractSocket::DontShareAddress );//失败
//? ? tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::ReuseAddressHint );
//? ? tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::ShareAddress? );
//? ? tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::DontShareAddress );
? ? //tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::ReuseAddressHint | QAbstractSocket::ShareAddress? );
? ? //tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::DontShareAddress | QAbstractSocket::ReuseAddressHint? );
? ? //tf =m_pSocket-bind(QHostAddress("192.168.112.100"),m_port,QAbstractSocket::DontShareAddress | QAbstractSocket::ShareAddress? );
? ? //m_pSocket-bind(QHostAddress::Any, m_port );//方便使用
qt不析构崩溃
将this指针替换成指向对象本身的智能指针。当类本身被share_ptr(智能指针)管理,且在类本身的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr。
在实现上面的功能之前,得保证该类支持shared_from_this()函数,该函数封装在类enable_shared_from_this里面。这个时候就得让该类继承enable_shared_from_this类。
代码示例如下:
.h文件
class base;
typedef boost::shared_ptrbase basePtr;
class base : public boost::enable_shared_from_thisbase
public:
base();
~base();
protected:
basePtr self(); //能返回指向本身的智能指针
void testFunc(); //测试函数
boost::shared_ptrboost::asio::strand m_strand;
}
复
.cpp文
class base
base::base()
"这里是构造函数!";
base::~ba
"这里是析构函数!";
basePtr base::self(
return boost::dynamic_pointer_castbase(shared_from_this());
void base::testFunc()
// threadFunc是需要转到线程的函数
m_strand-post(boost::bind(base::threadFunc, this)); //使用this指针的方法,如果base存在被析构的可能,不建议使用这种方法
m_strand-post(boost::bind(base::threadFunc, self())); //使用智能指针的方法
boost和C++11
本文中我使用的boost里面的函数并没有使用C++11新特性,原因是我的工作环境还没有向C++11转换,所以采用的boost,如果大家已经开始使用C++11可以直接#includememory.h就可以了,其他的将boost::换成std::