33,311
社区成员
发帖
与我相关
我的任务
分享
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_TYGUI.h"
#include <QString>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
#include "ThostFtdcTraderApi.h"
#include "global_config.h"
#include "TYCTPSpi.h"
class TYGUI : public QMainWindow
{
Q_OBJECT
public:
TYGUI(QWidget *parent = Q_NULLPTR);
private:
Ui::TYGUIClass ui;
CThostFtdcTraderApi *api;
TYCTPSpi *spi;
private slots:
void click_login();
public:
int login(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID);
};
#include "TYGUI.h"
#include <ThostFtdcTraderApi.h>
TYGUI::TYGUI(QWidget *parent)
: QMainWindow(parent)
{
//ui.setupUi(this);
setWindowTitle("TY API");
login_button->setText("log in");
QObject::connect(login_button, &QPushButton::clicked, this, &TYGUI::click_login);
api = CThostFtdcTraderApi::CreateFtdcTraderApi(pathOfLocalFiles);
//新建交易spi,该类中的private的api放入
this->spi = new TYCTPSpi(api);
api->RegisterSpi(spi);
api->RegisterFront(ipAddressOfTdFront);
api->SubscribePublicTopic(THOST_TERT_RESTART);
api->SubscribePrivateTopic(THOST_TERT_RESUME);
api->Init();
//api->Join();
}
void TYGUI::click_login()
{
CThostFtdcReqUserLoginField req;
memset(&req, 0, sizeof(req));
strcpy(req.BrokerID, BROKERID);
strcpy(req.UserID, ACCOUNT);
strcpy(req.Password, PASSWORD);
switch (login(&req, 0))
{
case 0:
status_label->setText("--->Login Request has been sent.");
break;
case -1:
status_label->setText("--->Not sent because network.");
break;
case -2:
status_label->setText("--->Not sent because queue is full.");
case -3:
status_label->setText("--->Not sent because too many request.");
default:
status_label->setText("--->Not sent because unknown reason.");
}
}
int TYGUI::login(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID)
{
return api->ReqUserLogin(pReqUserLoginField, nRequestID);
}
#pragma once
#include "ThostFtdcTraderApi.h"
#include <QString>
//#include "TYGUI.h" 这里一加就报错
class TYCTPSpi : public CThostFtdcTraderSpi
{
public:
TYCTPSpi(CThostFtdcTraderApi*);
//TYCTPSpi();
~TYCTPSpi();
private:
CThostFtdcTraderApi *pUserTradeApi;
public:
///登录请求响应
virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
};
#include <time.h>
#include <TYCTPSpi.h>
#include <QTextStream>
#include <QDebug>
#include <stdio.h>
QTextStream cin(stdin, QIODevice::ReadOnly);
QTextStream cout(stdout, QIODevice::WriteOnly);
QTextStream cerr(stderr, QIODevice::WriteOnly);
TYCTPSpi::TYCTPSpi(CThostFtdcTraderApi *api)
{
this->pUserTradeApi = api;
}
TYCTPSpi::~TYCTPSpi()
{
}
void TYCTPSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast)
{
qDebug() << "--->" << __FUNCTION__ << "<----";
if (pRspInfo->ErrorID == 0) {
qDebug() << "Login Success!" ;
}
else {
qDebug() << "Sorry, Login Failed!" << "reason:\t" << pRspInfo->ErrorMsg << endl;
}
}