尝试将 QLayout“”添加到已经有布局的 convertidorNumericoDialog“”

Attempting to add QLayout "" to convertidorNumericoDialogo "" which already has a layout

怎么了朋友们,我得到了标题问题,programm working with 3 QLineEdit where 1st it's to introduce a decimal number, 2nd a hex, and 3rd a binary.

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

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

我需要你的帮助,也许我什么都没看到....这实际上是我第一次使用 QGidLayout 等

下一个是我的代码:

convertidorNumerico.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


convertidorNumericoDialogo.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