#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
#include
#include
#include
#include "comm.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
/*
QFont font("Courier New [Cronyx]", 10);
ui->textEdit_Recv->setFont(font);
ui->textEdit_Send->setFont(font);
*/
tcpSocket = new QTcpSocket( this );
ui->lineEdit_IP->setText("192.168.14.23");
ui->lineEdit_Port->setText("5084");
ui->textEdit_Send->setText("Hello World!");
connect( tcpSocket, SIGNAL(error(int)), this, SLOT(errMsg(int)) );
connect( ui->pushButton_Send, SIGNAL(clicked()), this, SLOT(on_pushButton_Send_clicked(bool)) );
connect( ui->pushButton_Connect, SIGNAL(clicked()), this, SLOT(on_pushButton_Connect_clicked(bool)) );
connect( tcpSocket, SIGNAL(readyRead()), this, SLOT(recvMsg()) );
QStatusBar* bar = ui->statusBar; //获取状态栏
fstLabel = new QLabel; //新建标签
fstLabel->setMinimumSize(150,20); //设置标签最小尺寸
fstLabel->setFrameShape(QFrame::Panel); //设置标签形状
fstLabel->setFrameShadow(QFrame::Sunken); //设置标签阴影
secLabel = new QLabel;
secLabel->setFrameShape(QFrame::Panel);
secLabel->setFrameShadow(QFrame::Sunken);
secLabel->setText(tr("关于作者"));
secLabel->setToolTip(tr("作者邮箱"));
secLabel->setStatusTip(tr("Email:camel.shoko@gmail.com"));
secLabel->setOpenExternalLinks(true);
fstLabel->setText(tr("状态信息"));
bar->addPermanentWidget(fstLabel);
bar->addPermanentWidget(secLabel);
ui->pushButton_Connect->setEnabled(true);
ui->pushButton_Close->setEnabled(false);
ui->pushButton_Send->setEnabled(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::recvMsg()
{
QString new_data;
QByteArray old_data;
old_data += tcpSocket->readAll();
ui->textEdit_Recv->moveCursor(QTextCursor::End);
if(ui->checkBox_DHex->isChecked())
{
new_data = BgComm::ByteArrayToHexString(old_data);
}
else
{
new_data = QString(old_data);
}
ui->textEdit_Recv->insertHtml(new_data);
if(ui->checkBox_Newline->isChecked())
{
ui->textEdit_Recv->insertPlainText("\n");
}
fstLabel->setText(tr("接收成功"));
}
void MainWindow::errMsg( int errNo )
{
qWarning( "this is err %d!", errNo );
fstLabel->setText(tr("连接错误"));
}
QByteArray MainWindow::Send_Check(QString tmp, bool hex)
{
QByteArray ret;
if(hex)
{
bool ok;
ret = BgComm::HexStringToByteArray(tmp, &ok);
if(!ok)
{
ret = 0;
QMessageBox::critical(this, tr("错误"), tr("请输入合适的数据,各个数据之间用空格分开。"));
}
}
else
{
ret = tmp.toLatin1();
}
return ret;
}
void MainWindow::on_pushButton_Send_clicked()
{
QTextStream out(tcpSocket);
QString context = ui->textEdit_Send->toPlainText();
if(!SocketStatus || context.isEmpty())
{
return;
}
QByteArray tmp = Send_Check(context,ui->checkBox_SHex->isChecked());
out << tmp << endl;
fstLabel->setText(tr("发送成功"));
}
void MainWindow::on_pushButton_Connect_clicked()
{
QString port;
int port_Int;
port = ui->lineEdit_Port->text();
port_Int = port.toInt();
tcpSocket->connectToHost(QHostAddress(ui->lineEdit_IP->text()), port_Int);
if (!tcpSocket->waitForConnected(2))
{
tcpSocket->disconnectFromHost();
return;
}
SocketStatus = true;
ui->pushButton_Connect->setEnabled(false);
ui->pushButton_Close->setEnabled(true);
ui->pushButton_Send->setEnabled(true);
fstLabel->setText(tr("连接成功"));
}
void MainWindow::on_pushButton_Clear_clicked()
{
ui->textEdit_Recv->clear();
fstLabel->setText(tr("清除接收区"));
}
void MainWindow::on_pushButton_Close_clicked()
{
tcpSocket->disconnectFromHost();
SocketStatus = false;
ui->pushButton_Connect->setEnabled(true);
ui->pushButton_Close->setEnabled(false);
ui->pushButton_Send->setEnabled(false);
fstLabel->setText(tr("关闭连接"));
}
void MainWindow::on_checkBox_DHex_stateChanged(int state)
{
QString text = ui->textEdit_Recv->toPlainText();
bool ok;
if(text.isEmpty())
{
return;
}
if(state == Qt::Checked)
{
ui->textEdit_Recv->setPlainText(BgComm::ByteArrayToHexString(text.toLatin1()));
}
else if(state == Qt::Unchecked)
{
ui->textEdit_Recv->setPlainText(BgComm::HexStringToByteArray(text, &ok));
}
changeTextEditTrans();
}
void MainWindow::changeTextEditTrans()
{
QString tmp = ui->textEdit_Recv->toHtml();
if(tmp.isEmpty())
{
return;
}
ui->textEdit_Recv->setText(tmp);
}