如何使用保护函数setLocalPort?
How to use protected function setLocalPort?
我应该为我的套接字连接使用 setlocalport,但是 属性 受到保护并且我有一个编译错误。
这是在qt应用程序中。
m_pSocket = new QTcpSocket();
m_pSocket->setLocalPort(m_iLocalPort);
错误:‘void QAbstractSocket::setLocalPort(quint16)’受到保护
如果您想像 public 一样使用受保护成员,那么您应该提供一个自定义 class,它是您打算使用其受保护方法的 class 的子项.没有什么可以禁止您创建子 class 继承 QTcpSocket, and then using the protected method you want. Example for the QTcpSocket 此处描述的情况可以是以下情况。
// Let us define CustomTcpSocket, i.e. the class inheriting QTcpSocket
#pragma once
#include <QTcpSocket>
class CustomTcpSocket
: public QTcpSocket
{
Q_OBJECT
public:
CustomTcpSocket(QObject* parent = nullptr);
virtual ~CustomTcpSocket();
// This method will be used to call QTcpSocket::setLocalPort which is protected.
void SetLocalPort(quint16 port);
};
然后,我们提供实现本身。
#include "CustomTcpSocket.h"
CustomTcpSocket::CustomTcpSocket(QObject* parent)
: QTcpSocket(parent)
{
}
CustomTcpSocket::~CustomTcpSocket()
{
}
void CustomTcpSocket::SetLocalPort(quint16 port)
{
// Since method is protected, and scope is the child one, we can easily call this method here.
QAbstractSocket::setLocalPort(port);
}
现在我们可以通过以下方式轻松使用这个新创建的class。
auto customTcpSocketInstance = new CustomTcpSocket();
customTcpSocketInstance->SetLocalPort(123456);
通过使用多态性,CustomTcpSocket 的实例应该被其他 Qt 的 API 接受。但是,不能保证它会像您期望的那样工作。出于某些原因,Qt 开发人员希望此方法受到保护。所以,慎用。
我应该为我的套接字连接使用 setlocalport,但是 属性 受到保护并且我有一个编译错误。
这是在qt应用程序中。
m_pSocket = new QTcpSocket();
m_pSocket->setLocalPort(m_iLocalPort);
错误:‘void QAbstractSocket::setLocalPort(quint16)’受到保护
如果您想像 public 一样使用受保护成员,那么您应该提供一个自定义 class,它是您打算使用其受保护方法的 class 的子项.没有什么可以禁止您创建子 class 继承 QTcpSocket, and then using the protected method you want. Example for the QTcpSocket 此处描述的情况可以是以下情况。
// Let us define CustomTcpSocket, i.e. the class inheriting QTcpSocket
#pragma once
#include <QTcpSocket>
class CustomTcpSocket
: public QTcpSocket
{
Q_OBJECT
public:
CustomTcpSocket(QObject* parent = nullptr);
virtual ~CustomTcpSocket();
// This method will be used to call QTcpSocket::setLocalPort which is protected.
void SetLocalPort(quint16 port);
};
然后,我们提供实现本身。
#include "CustomTcpSocket.h"
CustomTcpSocket::CustomTcpSocket(QObject* parent)
: QTcpSocket(parent)
{
}
CustomTcpSocket::~CustomTcpSocket()
{
}
void CustomTcpSocket::SetLocalPort(quint16 port)
{
// Since method is protected, and scope is the child one, we can easily call this method here.
QAbstractSocket::setLocalPort(port);
}
现在我们可以通过以下方式轻松使用这个新创建的class。
auto customTcpSocketInstance = new CustomTcpSocket();
customTcpSocketInstance->SetLocalPort(123456);
通过使用多态性,CustomTcpSocket 的实例应该被其他 Qt 的 API 接受。但是,不能保证它会像您期望的那样工作。出于某些原因,Qt 开发人员希望此方法受到保护。所以,慎用。