Eheh, I'm so sorry for my misunderstanding
Modifying my prev project, hope can give you a little clue
class MyClient;
private slots:
void sendMsg();
void receiveMsg();
private:
Ui::MyClient *ui;
class MyClient;
private slots:
void sendMsg();
void receiveMsg();
private:
Ui::MyClient *ui;
QLineEdit* activeLineEdit;
QLabel* activeLabel;
To copy to clipboard, switch view to plain text mode
#include "myclient.h"
#include "ui_myclient.h"
#include <QDebug>
MyClient
::MyClient(QWidget *parent
) : ui(new Ui::MyClient)
{
ui->setupUi(this);
foreach
(QWidget *widget, findChildren<QWidget
*>
()) //hide all lineedit & label widget->setVisible(false);
foreach
(QLabel *label, findChildren<QLabel
*>
()) //make label read only to display received data label->setEnabled(false);
foreach
(QLineEdit *lineedit, findChildren<QLineEdit
*>
()) //create connect signal & slot connect(lineedit, SIGNAL(editingFinished()), this, SLOT(sendMsg()));
ui->lineEdit_1->setVisible(true); //show the first entry field
ui->label_1->setVisible(true);
connect(&m_webSocket, &QWebSocket::textMessageReceived, this, receivedMsg);
}
void MyClient::sendMsg()
{
activeLineEdit = qobject_cast<QLineEdit*>(sender());
qDebug()<<activeLineEdit->text(); //just to check the line edit value
//send the value to server, add header as you need e.g requested objectindex
//objectindex related to enumerator of table/column in your db against existing qlabel
}
void MyClient::receiveMsg()
{
bool validity;
//suppose you get data from server e.g (validity~objectindex~receivedmessage)
//parse received message
if (!validity)
{
//re-entry or something
}
else
{
foreach
(QLabel *whichlabel, findChildren<QLabel
*>
()) {
if (whichlabel->objectName()==testName) //lookup right label to place the message
whichlabel->setText(receivedMessage);
if (whichlabel->objectName()==testName2) //show next label
whichlabel->setVisible(true);
}
activeLineEdit->nextInFocusChain()->setVisible(true);//show next field
activeLineEdit->nextInFocusChain()->setFocus();
}
}
#include "myclient.h"
#include "ui_myclient.h"
#include <QDebug>
MyClient::MyClient(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyClient)
{
ui->setupUi(this);
foreach (QWidget *widget, findChildren<QWidget *>()) //hide all lineedit & label
widget->setVisible(false);
foreach (QLabel *label, findChildren<QLabel *>()) //make label read only to display received data
label->setEnabled(false);
foreach (QLineEdit *lineedit, findChildren<QLineEdit *>()) //create connect signal & slot
connect(lineedit, SIGNAL(editingFinished()), this, SLOT(sendMsg()));
ui->lineEdit_1->setVisible(true); //show the first entry field
ui->label_1->setVisible(true);
connect(&m_webSocket, &QWebSocket::textMessageReceived, this, receivedMsg);
}
void MyClient::sendMsg()
{
activeLineEdit = qobject_cast<QLineEdit*>(sender());
qDebug()<<activeLineEdit->text(); //just to check the line edit value
//send the value to server, add header as you need e.g requested objectindex
//objectindex related to enumerator of table/column in your db against existing qlabel
}
void MyClient::receiveMsg()
{
bool validity;
//suppose you get data from server e.g (validity~objectindex~receivedmessage)
//parse received message
if (!validity)
{
//re-entry or something
}
else
{
QString testName = QString("label_%1").arg(objectindex);
QString testName2 = QString("label_%1").arg(objectindex+1);
foreach (QLabel *whichlabel, findChildren<QLabel *>())
{
if (whichlabel->objectName()==testName) //lookup right label to place the message
whichlabel->setText(receivedMessage);
if (whichlabel->objectName()==testName2) //show next label
whichlabel->setVisible(true);
}
activeLineEdit->nextInFocusChain()->setVisible(true);//show next field
activeLineEdit->nextInFocusChain()->setFocus();
}
}
To copy to clipboard, switch view to plain text mode
...all the rest is about qwebsocket connection & data processing in server I think you could manage it.
For the last part, maybe any expert here have better approach. My method above rely on ordered QObject naming.
I'v ever seen wysota in different thread using static meta object enumeration, may be can be used to move to next item. Have it try
Bookmarks