由于是刚学,有一些总结仅限于个人目前阶段的理解,有错误处还望指正
不同类之间的函数传递,有多种方法
方法1:
在一个函数中需要调用别的类的函数,需要通过dwUser进行传递
如以下cbCameraFunc是一个回调用函数,如果想调用类Dialog下的成员函数,可以:
void Dialog::on_Query_channel_state()
{
pstInParam.dwUser= (LDWORD)this; // 传入
...
}
void CALLBACK cbCameraFunc(LLONG lLoginID, LLONG lAttachHandle, const NET_CB_CAMERASTATE *pBuf, int nBufLen,LDWORD dwUser)
{
Dialog * pThis = (Dialog *)dwUser; // 传出
...
}
方法2:可能在另外一个函数中new一个。
如,想在widget的类中定义DHVideoDeviceOper类中的成员函数
class Widget : public QWidget
{
Q_OBJECT
private:
DHVideoDeviceOper *m_dh_video;
}
在widget的构造函数中进行初始化
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
m_dh_video = NULL;
}
在widget的成员函数init_video中进行new
void Widget::init_video()
{
DH_PARAM dh_param;
dh_param.cb_func_disConnect = NULL;
dh_param.cb_DecodeVideo = decodeCallback;
dh_param.nChannelNum = 0;
... // dh_param的初始化
m_dh_video = new DHVideoDeviceOper(dh_param); // new
}
方法3:
class FindDialog : public QDialog
{
Q_OBJECT
// 在findDialog内部也需要一个指针指向外部的文本框对象
QPointer<QPlainTextEdit> m_pText; // 在findDialog内部也需要一个指针指向外部的文本框对象
//在构造函数中需要有个指针,指向外部文本框对象
explicit FindDialog(QWidget* parent = 0, QPlainTextEdit* pText = 0); // 在构造函数中需要有个指针,指向外部文本框对象
void setPlainTextEdit(QPlainTextEdit* pText);
QPlainTextEdit* getPlainTextEdit();
}
void FindDialog::setPlainTextEdit(QPlainTextEdit* pText)
{
m_pText = pText;
}
QPlainTextEdit* FindDialog::getPlainTextEdit()
{
return m_pText;
}
QPoint的特点:当它指向的Qt对象被销毁的时候,这个智能指针会被自动设置为NULL,这对于设置松耦合关系特别适合。