尝试将 QLayout " "添加到已具有布局的转换或数字对话" "



朋友们,我遇到了标题的问题,用3 QLineEdit编程,其中第一个是引入十进制,第二个是十六进制,第三个是二进制。

当我引入一个十进制数时,我得到了有效的信号,然后它将十六进制值放入第二个QLineEdit(由信号转换(,并以相同的方式处理二进制值。

直到这里,以前是工作的(但不是现在(,在我放了一个代码来引入二进制或十六进制后,它变成了十进制,而另一个值…

我需要你的帮助,也许我没有看到什么。。。。这确实是我第一次使用QIdLayout等

我的代码是下一个:

转换器代码Numerico.cpp


#include "convertidornumerico.h"
convertidorNumerico::convertidorNumerico(QObject *parent) : QObject(parent)
{
}
void convertidorNumerico::setDec(const QString &cadena)
{
bool ok;
int num = cadena.toInt(&ok);
if ( ok )
{
emit hexChanged(QString::number(num, 16));
emit binChanged(QString::number(num, 2));
}
else
{
emit hexChanged("");
emit binChanged("");
}
}
void convertidorNumerico::setHex(const QString &cadena)
{
bool ok;
int num = cadena.toInt(&ok, 16);
if ( ok )
{
emit decChanged(QString::number(num));
emit binChanged(QString::number(num, 2));
}
else
{
emit decChanged("");
emit binChanged("");
}
}
void convertidorNumerico::setBin(const QString &cadena)
{
bool ok;
int num = cadena.toInt(&ok);
if ( ok )
{
emit decChanged(QString::number(num));
emit hexChanged(QString::number(num, 16));
}
else
{
emit decChanged("");
emit hexChanged("");
}
}

convertidorNumerico.h的代码


#ifndef CONVERTIDORNUMERICO_H
#define CONVERTIDORNUMERICO_H
#include <QObject>
class convertidorNumerico : public QObject
{
Q_OBJECT
public:
explicit convertidorNumerico( QObject *parent = nullptr );
signals:
void decChanged(const QString &);
void hexChanged(const QString &);
void binChanged(const QString &);
public slots:
void setDec(const QString &);
void setHex(const QString &);
void setBin(const QString &);
};
#endif // CONVERTIDORNUMERICO_H

转换器NumericoDialogo.cpp的代码


#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QIntValidator>
#include <QRegularExpression>
#include <QRegularExpressionValidator>
#include "convertidornumericodialogo.h"
#include "convertidornumerico.h"
/*convertidorNumericoDialogo::convertidorNumericoDialogo(QObject *parent) : QObject(parent)
{
}*/
convertidorNumericoDialogo::convertidorNumericoDialogo()
{
QVBoxLayout *mainLayout = new QVBoxLayout   ( this );
QGridLayout *editLayout = new QGridLayout   ( this );
QHBoxLayout *btnLayout = new QHBoxLayout    ( this );
QLabel *decLabel = new QLabel("decimal");
QLabel *hexLabel = new QLabel("Hexadecimal");
QLabel *binLabel = new QLabel("Binario");
decEdit = new QLineEdit;
hexEdit = new QLineEdit;
binEdit = new QLineEdit;
editLayout->addWidget(decLabel, 0, 0);
editLayout->addWidget( decEdit, 0, 1 );
editLayout->addWidget( hexLabel, 1, 0 );
editLayout->addWidget( hexEdit, 1, 1 );
editLayout->addWidget(binLabel, 2, 0);
editLayout->addWidget(binEdit, 2, 1);
QPushButton *btnSalir = new QPushButton("SALIR");
btnLayout->addStretch();
btnLayout->addWidget(btnSalir);
mainLayout->addLayout(editLayout);
mainLayout->addStretch();
mainLayout->addLayout(btnLayout);
btnSalir->setDefault(true);
connect(btnSalir, SIGNAL(released()), this, SLOT(accept()));
// VALORES DE UN BYTE : 0 - 255
QIntValidator *decVal = new QIntValidator(0, 255, decEdit);
decEdit->setValidator(decVal);
// EXP REG PARA VALIDAR HEXADECIMALES DE HASTA 2 DIGITOS....
QRegularExpressionValidator *hexVal = new QRegularExpressionValidator(
QRegularExpression("^[0-9A-Fa-f]{1,2}"), hexEdit);
hexEdit->setValidator(hexVal);
// EXP REG PARA VALIDAR BINARIOS DE HASTA 8 BYTES....
QRegularExpressionValidator *binVal = new QRegularExpressionValidator(
QRegularExpression("[0-1]{1,8}"), binEdit);
binEdit->setValidator(binVal);
convertidorNumerico *convertidor = new convertidorNumerico;
connect(decEdit, SIGNAL(textChanged(QString)), convertidor, SLOT(setDec(QString)));
connect(convertidor, SIGNAL(hexChanged(QString)), hexEdit, SLOT(setText(QString)));
connect(convertidor, SIGNAL(binChanged(QString)), binEdit, SLOT(setText(QString)));

// tarea: => CONECTAR las señales de hexa y binario, para que ingresando esos datos, se devuelva la info en la app.
connect(hexEdit, SIGNAL(textChanged(QString)), convertidor, SLOT(setHex(QString)));
connect(binEdit, SIGNAL(textChanged(QString)), convertidor, SLOT(setBin(QString)));
connect(convertidor, SIGNAL(decChanged(QString)), decEdit, SLOT(setText(QString)));
}

convertidorNumericoDialogo.h的代码


#ifndef CONVERTIDORNUMERICODIALOGO_H
#define CONVERTIDORNUMERICODIALOGO_H
#include <QDialog>

class QLineEdit;
class convertidorNumericoDialogo : public QDialog
{
Q_OBJECT
public:
//explicit convertidorNumericoDialogo(QObject *parent = nullptr);
explicit convertidorNumericoDialogo();
private:
QLineEdit *decEdit;
QLineEdit *hexEdit;
QLineEdit *binEdit;
};
#endif // CONVERTIDORNUMERICODIALOGO_H

有什么解决方案吗?我什么都做了,但没能成功。。。

您正在设置多个布局,请更改此项:

QVBoxLayout *mainLayout = new QVBoxLayout   ( this );
QGridLayout *editLayout = new QGridLayout   ( this );
QHBoxLayout *btnLayout = new QHBoxLayout    ( this );

QVBoxLayout *mainLayout = new QVBoxLayout   ( this );
QGridLayout *editLayout = new QGridLayout;
QHBoxLayout *btnLayout = new QHBoxLayout;

请参阅https://doc.qt.io/qt-5/qlayout.html#QLayout

最新更新