通过Linux的Windows子系统在Windows上获得硬币时遇到问题。 它可以在MAC OS和Ubuntu上正常编译。
通过gitian,ubuntu和现在用于Linux的Windows子系统尝试了debian。
码:
#include "connectionwidget.h"
#include "ui_connectionwidget.h"
#include "searchconnectionsmodel.h"
#include "constants.h"
#include
#include
#include
#include
QString ClientNAME;
QString ClientWALLET;
ConnectionWidget::ConnectionWidget(QWidget *parent)
: QWidget(parent)
, m_model(new SearchConnectionsModel(this))
, m_broadcastSocket(new QUdpSocket(this))
, ui(new Ui::ConnectionWidget)
{
ui->setupUi(this);
ui->lvItems->setModel(m_model);
m_broadcastSocket->bind(/*QHostAddress::Any, */DiscoveryPort/*, QAbstractSocket::ReuseAddressHint*/);
connect(m_broadcastSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
connect(ui->pbConnect, SIGNAL(clicked(bool)), this, SLOT(onConnectBtnPressed()));
connect(ui->tbSearch, SIGNAL(clicked(bool)), this, SLOT(onSearchButtonPressed()));
connect(ui->lvItems, SIGNAL(clicked(const QModelIndex&)),
this, SLOT(onClicked(const QModelIndex&)));
m_adresses = QNetworkInterface::allAddresses();
}
ConnectionWidget::~ConnectionWidget()
{
delete ui;
}
void ConnectionWidget::onPortChanged(int newPort)
{
if(newPort > 0 && newPort < 0xFFFF)
m_port = newPort;
}
void ConnectionWidget::onNameChanged(const QString & newName)
{
m_name = newName;
ClientNAME = newName;
}
void ConnectionWidget::onWalletChanged(const QString & newWallet)
{
m_wallet = newWallet;
ClientWALLET = newWallet;
}
void ConnectionWidget::onConnectBtnPressed()
{
QTcpSocket *socket = new QTcpSocket(NULL);
QString host = ui->lineEdit->text();
quint16 port = ui->spinBox->value();
socket->connectToHost(host, port);
if(socket->waitForConnected(ConnectionTimeout)) {
emit connectEstablished(socket);
}
else {
QMessageBox::critical(this, tr("Connection Error"),
QString("Can't connect to the %1:%2").arg(host).arg(port));
}
}
void ConnectionWidget::onSearchButtonPressed()
{
m_model->removeRows(0, m_model->rowCount());
m_broadcastSocket->writeDatagram(DiscoveryWorld.toUtf8(), QHostAddress::Broadcast, DiscoveryPort);
}
void ConnectionWidget::readPendingDatagrams()
{
while (m_broadcastSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(m_broadcastSocket->pendingDatagramSize());
QHostAddress senderHost;
quint16 senderPort;
m_broadcastSocket->readDatagram(datagram.data(), datagram.size(),
&senderHost, &senderPort);
qDebug() << "->" << senderHost << senderPort << datagram;
if(m_adresses.contains(senderHost))
continue;
processTheDatagram(datagram, senderHost);
}
}
void ConnectionWidget::processTheDatagram(QByteArray &datagram, QHostAddress &senderHost)
{
QString data = QString::fromUtf8(datagram);
if(data == DiscoveryWorld) {
QString answer = QString("%1\t%2\t%3")
.arg(m_name)
.arg(m_port)
.arg(m_wallet);
QUdpSocket sock;
int writed = sock.writeDatagram(answer.toUtf8(), senderHost, DiscoveryPort);
qDebug() << "
//sock.waitForBytesWritten();
}
else {
QStringList answer = data.split("\t", QString::KeepEmptyParts);
if(answer.size() != 3)
return;
QList row = QList() << new QStandardItem(answer[0])
<< new QStandardItem(senderHost.toString())
<< new QStandardItem(answer[1])
<< new QStandardItem(answer[2]);
m_model->appendRow(row);
}
}
void ConnectionWidget::onClicked(const QModelIndex& index)
{
const QAbstractItemModel *model = index.model();
const QModelIndex parent = index.parent();
ui->lineEdit->setText(model->data(model->index(index.row(),1,parent)).toString());
ui->spinBox->setValue(model->data(model->index(index.row(),2,parent)).toUInt());
}
错误:
CXX qt / filesharing / qt_libbitcoinqt_a-connectionwidget.o qt / filesharing / connectionwidget.cpp:在构造函数'ConnectionWidget :: ConnectionWidget(QWidget *)'中:qt / filesharing / connectionwidget.cpp:16:44:错误:无效使用不完整类型'class QUdpSocket',m_broadcastSocket(new QUdpSocket(this))^在qt / filesharing / connectionwidget.cpp:1:0中包含的文件中:qt / filesharing / connectionwidget.h:9:7:注意:'QUDpSocket类的正向声明'类QUdpSocket; ^ ~~~~~~~~~ qt / filesharing / connectionwidget.cpp:23:22:错误:无效使用不完整的类型'class QUdpSocket'm_broadcastSocket-> bind(/ * QHostAddress :: Any, / DiscoveryPort / ,QAbstractSocket :: ReuseAddressHint * /); ^〜在qt / filesharing / connectionwidget.cpp:1:0中包含的文件中:qt / filesharing / connectionwidget.h:9:7:注意:“类QUdpSocket”类QUdpSocket的前向声明; ^ ~~~~~~~~~ qt / filesharing / connectionwidget.cpp:25:87:错误:没有匹配的函数来调用'ConnectionWidget :: connect(QUdpSocket *&,const char *,ConnectionWidget *,const char * )'connect(m_broadcastSocket,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams())); ^在/home/coin/depends/x86_64-w64-mingw32/share/../include/QtWidgets/qwidget.h:45:0中包含的文件中,从/ home / coin / depends / x86_64-w64-mingw32 / share /../include/QtWidgets/QWidget:1,来自qt / filesharing / connectionwidget.h:4,来自qt / filesharing / connectionwidget.cpp:1:/ home / coin / depends / x86_64-w64-mingw32 / share /。 ./include/QtCore/qobject.h:214:36:注意:候选:静态QMetaObject :: Connection QObject :: connect(const QObject *,const char *,const QObject *,const char *,Qt :: ConnectionType)静态QMetaObject :: Connection connect(const QObject * sender,const char signal,^ ~~~~~~ /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:214: 36:注意:参数1没有从'QUdpSocket '到'const QObject *'的已知转换 /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:217:36:注意:候选者:静态QMetaObject :: Connection QObject :: connect(const QObject *,const QMetaMethod&,const QObject *,const QMetaMethod&,Qt :: ConnectionType)静态QMetaObject: :Connection connect(const QObject sender,const QMetaMethod&signal,^ ~~~~~~ / home / coin / depends / x86_64-w64-mingw32 / share /../ include / QtCore / qobject.h:217:36:注意:参数1从'QUdpSocket '到'const QObject *'的未知转换 /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:469:32:注意:候选:QMetaObject :: Connection QObject :: connect(const QObject *,const char *,const char *,Qt :: ConnectionType)const inline QMetaObject :: Connection QObject :: connect(const QObject * asender,const char asignal,^ ~~ ~~~~ /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:469:32:注意:参数1没有从'QUdpSocket '到'const QObject的已知转换 *'/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:234:43:注意:候选:模板静态QMetaObject :: Connection QObject :: connect(const类型名QtPrivate :: FunctionPointer :: Object *,Func1,const类型名QtPrivate :: FunctionPointer :: Object *,Func2,Qt :: ConnectionType)stati c内联QMetaObject :: Connection connect(const类型名QtPrivate :: FunctionPointer :: Object sender,Func1 signal,^ ~~~~~~ / home / coin / depends / x86_64-w64-mingw32 / share /../ include / QtCore /qobject.h:234:43:注意:模板参数推导/替换失败:/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:替代了'template static QMetaObject :: Connection QObject :: connect(const typename QtPrivate :: FunctionPointer :: Object ,Func1,const typename QtPrivate :: FunctionPointer :: Object *,Func2,Qt :: ConnectionType)[with Func1 = const char *; Func2 = const char *]':qt /文件共享/connectionwidget.cpp:25:87:此处需要/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:234 :43:错误:'struct QtPrivate :: FunctionPointer'/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:266:13中没有名为'Objec'的类型:候选:模板静态类型名称std :: enable_if
= 0),QMetaObject :: Connection> ::类型QObject :: connect(常量类型名称QtPrivate :: FunctionPointer :: Object *,Func1,Func2)connect(常量类型名称QtPrivate :: FunctionPointer :: Object sender,Func1 signal,Func2 slot )^ ~~~~~~ /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:266:13:注意:模板参数推导/替换失败:qt /文件共享/connectionwidget.cpp:25:87:注意:候选人期望3个参数,其中4个提供connect(m_broadcastSocket,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams())); ^在/home/coin/depends/x86_64-w64-mingw32/share/../include/QtWidgets/qwidget.h:45:0中包含的文件中,从/ home / coin / depends / x86_64-w64-mingw32 / share /../include/QtWidgets/QWidget:1,来自qt / filesharing / connectionwidget.h:4,来自qt / filesharing / connectionwidget.cpp:1:/ home / coin / depends / x86_64-w64-mingw32 / share /。 ./include/QtCore/qobject.h:275:13:注意:候选者:模板静态类型名称std :: enable_if :: type QObject :: connect(const类型名QtPrivate :: FunctionPointer :: Object ,Func1,const QObject *,Func2,Qt :: ConnectionType)connect(const类型名QtPrivate :: FunctionPointer :: Object * sender,Func1信号,const QObject 上下文,Func2插槽,^ ~~~~~~ / home / coin / depends / x86_64-w64-mingw32 / share /../ include / QtCore / qobject.h:275 :13:注意:模板参数推导/替换失败:/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/q object.h:代替'模板静态类型名称std :: enable_if :type QObject :: connect(const typename QtPrivate :: FunctionPointer :: Object ,Func1,const QObject *,Func2,Qt :: ConnectionType)[with Func1 = const char *; Func2 = const char *]':qt /文件共享/connectionwidget.cpp:25:87:此处需要/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:275 :13:错误:在'struct std :: enable_if'/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:306:13中没有名为'type'的类型:候选:模板静态类型名std :: enable_if :: type QObject :: connect(const typename QtPrivate :: FunctionPointer :: Object *,Func1 ,Func2)connect(const typename QtPrivate :: FunctionPointer :: Object sender,Func1 signal,Func2 slot)^ ~~~~~~ /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore /qobject.h:306:13:注意:模板参数推导/替换失败:qt / filesharing / connectionwidget.cpp:25:87:注意:候选人期望3个参数,其中4个提供connect(m_broadcastSocket,SIGNAL(readyRead()),这是SLOT(readPendingDatagrams())); ^在/home/coin/depends/x86_64-w64-mingw32/share/../include/QtWidgets/qwidget.h:45:0中包含的文件中,从/ home / coin / depends / x86_64-w64-mingw32 / share /../include/QtWidgets/QWidget:1,来自qt / filesharing / connectionwidget.h:4,来自qt / filesharing / connectionwidget.cpp:1:/ home / coin / depends / x86_64-w64-mingw32 / share /。 ./include/QtCore/qobject.h:314:13:注意:候选:模板静态类型名称std :: enable_if :: type QObject: :connect(const类型名称QtPrivate :: FunctionPointer :: Object ,Func1,const QObject *,Func2,Qt :: ConnectionType)connect(const类型名称QtPrivate :: FunctionPointer :: Object * sender,Func1 signal,const QObject context,Func2 slot, ^ ~~~~~~ /home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:314:13:注意:模板参数推导/替换失败:/ home / coin /depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:代替“模板静态类型名std :: enable_i f :: type QObject :: connect(const typename QtPrivate :: FunctionPointer :: Object ,Func1,const QObject *,Func2,Qt :: ConnectionType)[with Func1 = const char *; Func2 = const char *]':qt /文件共享/connectionwidget.cpp:25:87:此处需要/home/coin/depends/x86_64-w64-mingw32/share/../include/QtCore/qobject.h:314 :13:错误:'struct QtPrivate :: FunctionPointer'中没有名为'Objec'的类型qt / filesharing / connectionwidget.cpp:在成员函数'void ConnectionWidget :: onSearchButtonPressed()'中:qt / filesharing / connectionwidget.cpp:76: 22:错误:无效使用了不完整的类型'class QUdpSocket'm_broadcastSocket-> writeDatagram(DiscoveryWorld.toUtf8(),QHostAddress :: Broadcast,DiscoveryPort); ^〜在qt / filesharing / connectionwidget.cpp:1:0中包含的文件中:qt / filesharing / connectionwidget.h:9:7:注意:“类QUdpSocket”类QUdpSocket的前向声明; ^ ~~~~~~~~~ qt / filesharing / connectionwidget.cpp:在成员函数“ void ConnectionWidget :: readPendingDatagrams()”中:qt / filesharing / connectionwidget.cpp:81:29:错误:无效使用不完整类型'class QUdpSocket'while(m_broadcastSocket-> hasPendingDatagrams()){^〜在qt / filesharing / connectionwidget.cpp:1:0:qt / filesharing / connectionwidget.h:9:7包含的文件中:注意:正向声明'类QUdpSocket'类QUdpSocket; ^ ~~~~~~~~~ qt / filesharing / connectionwidget.cpp:83:42:错误:无效使用了不完整的类型'class QUdpSocket'datagram.resize(m_broadcastSocket-> pendingDatagramSize()); ^〜在qt / filesharing / connectionwidget.cpp:1:0中包含的文件中:qt / filesharing / connectionwidget.h:9:7:注意:“类QUdpSocket”类QUdpSocket的前向声明; ^ ~~~~~~~~~ qt / filesharing / connectionwidget.cpp:87:26:错误:无效使用不完整类型'class QUdpSocket'm_broadcastSocket-> readDatagram(datagram.data(),datagram.size(), ^〜在qt / filesharing / connectionwidget.cpp:1:0中包含的文件中:qt / filesharing / connectionwidget.h:9:7:注意:'class QUdpSocket'类QUdpSocket的前向声明; ^ ~~~~~~~ ~~ qt / filesharing / connectionwidget.cpp:在成员函数'void ConnectionWidget :: processTheDatagram(QByteArray&,QHostAddress&)'中:qt / filesharing / connectionwidget.cpp:106:20:错误:聚合'QUdpSocket sock'具有不完整的类型并且不能被定义为QUdpSocket袜子; ^ ~~~ Makefile:7533:目标'qt / filesharing / qt_libbitcoinqt_a-connectionwidget.o'的配方失败make [2]:*** [qt / filesharing / qt_libbitcoinqt_a-connectionwidget.o]错误1