本文共 8121 字,大约阅读时间需要 27 分钟。
//client.
#include "mainwindow.h"
#include <QtCore> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <class>MainWindow</class> <widget class="QMainWindow" name="MainWindow"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>151</width> <height>131</height> </rect> </property> <property name="windowTitle"> <string>MainWindow</string> </property> <widget class="QWidget" name="centralWidget"> <layout class="QGridLayout" name="gridLayout"> <item row="2" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Server:</string> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Port:</string> </property> </widget> </item> <item row="10" column="0"> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item row="10" column="2"> <widget class="QPushButton" name="pushButton"> <property name="text"> <string>Connect</string> </property> </widget> </item> <item row="4" column="0" colspan="3"> <widget class="QLineEdit" name="lineEdit"/> </item> <item row="7" column="0" colspan="3"> <widget class="QLineEdit" name="lineEdit_2"/> </item> </layout> </widget> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui> #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtCore> #include <QtGui> #include <QtWidgets> #include "client.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; Client *client; };#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setFixedSize(size()); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { QString host = ui->lineEdit->text(); quint16 port = ui->lineEdit_2->text().toInt(); client = new Client(host, port, this); ui->lineEdit->setEnabled(false); ui->lineEdit_2->setEnabled(false); ui->pushButton->setEnabled(false); }#ifndef CLIENT_H
#define CLIENT_H #include <QtCore> #include <QtNetwork> #include "audiooutput.h" class Client : public QObject { Q_OBJECT public: explicit Client(QString host, quint16 port, QObject *parent = 0); signals: public slots: private slots: void readyRead(); private: QTcpSocket *socket; AudioOutput output; }; #endif // CLIENT_H#include "client.h"
Client::Client(QString host, quint16 port, QObject *parent) : QObject(parent) { socket = new QTcpSocket(this); socket->connectToHost(host, port); connect(socket, SIGNAL(readyRead()), SLOT(readyRead())); } void Client::readyRead() { QByteArray data; while (socket->bytesAvailable() > 0) data.append(socket->readAll()); output.writeData(data); }#ifndef AUDIOOUTPUT_H
#define AUDIOOUTPUT_H #include <QtCore> #include <QtMultimedia> class AudioOutput : public QObject { Q_OBJECT public: explicit AudioOutput(QObject *parent = 0); signals: public slots: void writeData(QByteArray data); private: QAudioOutput *audio; QIODevice *device; }; #endif // AUDIOOUTPUT_H#include "audiooutput.h"
AudioOutput::AudioOutput(QObject *parent) : QObject(parent) { QAudioFormat format; format.setChannelCount(1); format.setSampleRate(8000); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleType(QAudioFormat::UnSignedInt); audio = new QAudioOutput(format, this); audio->setBufferSize(8192); device = audio->start(); } void AudioOutput::writeData(QByteArray data) { device->write(data.data(), data.size()); }QT += core gui multimedia network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = Client TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ audiooutput.cpp \ client.cpp HEADERS += mainwindow.h \ audiooutput.h \ client.h FORMS += mainwindow.ui//server.
#include "mainwindow.h"
#include <QtCore> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtCore> #include <QtGui> #include <QtWidgets> #include "audioinput.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void getDevInfo(); void on_pushButton_clicked(); private: Ui::MainWindow *ui; AudioInput *input; Server *server; }; #endif // MAINWINDOW_H#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setFixedSize(size()); getDevInfo(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::getDevInfo() { QList<QAudioDeviceInfo> devices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); if (devices.isEmpty()) QMessageBox::warning(this, "Error", "No input device found!"); for(int i = 0; i < devices.size(); ++i) ui->comboBox->addItem(devices.at(i).deviceName(), qVariantFromValue(devices.at(i))); } void MainWindow::on_pushButton_clicked() { QAudioDeviceInfo devinfo = ui->comboBox->itemData(ui->comboBox->currentIndex()).value<QAudioDeviceInfo>(); input = new AudioInput(devinfo, this); quint16 port = ui->lineEdit->text().toInt(); server = new Server(port, this); connect(input, SIGNAL(dataReady(QByteArray)), server, SLOT(writeData(QByteArray))); ui->comboBox->setEnabled(false); ui->lineEdit->setEnabled(false); ui->pushButton->setEnabled(false); }#ifndef SERVER_H
#define SERVER_H #include <QtCore> #include <QtNetwork> class Server : public QObject { Q_OBJECT public: explicit Server(quint16 port, QObject *parent = 0); signals: public slots: void writeData(QByteArray data); private slots: void newConnection(); void zeropointer(); private: QTcpServer *server; QTcpSocket *socket; }; #endif // SERVER_H#include "server.h"
Server::Server(quint16 port, QObject *parent) : QObject(parent) { socket = 0; server = new QTcpServer(this); connect(server, SIGNAL(newConnection()), SLOT(newConnection())); server->listen(QHostAddress::Any, port); } void Server::newConnection() { socket = server->nextPendingConnection(); connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater())); connect(socket, SIGNAL(destroyed()), SLOT(zeropointer())); } void Server::zeropointer() { socket = 0; } void Server::writeData(QByteArray data) { if (socket) socket->write(data); } #ifndef AUDIOINPUT_H #define AUDIOINPUT_H #include <QtCore> #include <QtMultimedia> #include "server.h" class AudioInput : public QObject { Q_OBJECT public: explicit AudioInput(QAudioDeviceInfo devinfo, QObject *parent = 0); signals: void dataReady(QByteArray data); public slots: private slots: void readyRead(); private: QAudioInput *audio; QIODevice *device; }; #endif // AUDIOINPUT_H#include "audioinput.h"
AudioInput::AudioInput(QAudioDeviceInfo devinfo, QObject *parent) : QObject(parent) { QAudioFormat format; format.setChannelCount(1); format.setSampleRate(8000); format.setSampleSize(8); format.setCodec("audio/pcm"); format.setByteOrder(QAudioFormat::LittleEndian); format.setSampleType(QAudioFormat::UnSignedInt); audio = new QAudioInput(devinfo, format, this); audio->setBufferSize(8192); device = audio->start(); connect(device, SIGNAL(readyRead()), SLOT(readyRead())); } void AudioInput::readyRead() { QByteArray data; //Check the number of samples in input buffer qint64 len = audio->bytesReady(); //Read sound samples from input device to buffer if (len > 0) { data.resize(len); device->read(data.data(), len); } emit dataReady(data); } QT += core gui multimedia network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = Server TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ audioinput.cpp \ server.cpp HEADERS += mainwindow.h \ audioinput.h \ server.h FORMS += mainwindow.ui转载地址:http://qbzji.baihongyu.com/