尝试将 QLayout“”添加到已经有布局的 convertidorNumericoDialogo“”[重复]
Posted
技术标签:
【中文标题】尝试将 QLayout“”添加到已经有布局的 convertidorNumericoDialogo“”[重复]【英文标题】:Attempting to add QLayout "" to convertidorNumericoDialogo "" which already has a layout [duplicate] 【发布时间】:2021-11-05 21:43:39 【问题描述】:朋友们怎么了,我得到了标题的问题,程序与 3 QLineEdit 一起工作,其中第一个是引入十进制数,第二个是十六进制数,第三个是二进制数。
当我引入一个十进制数时,我得到了有效的信号,然后它将十六进制值放入第二个 QLineEdit(它由信号转换),并以相同的方式用于二进制值。
直到这里,在工作之前(但不是现在),在我输入一个代码来引入二进制或十六进制之后,它变成了十进制,另一个 val...
我需要你的帮助,也许我什么都没看到......这实际上是我第一次使用 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
有什么解决办法吗?我做了一切,但我没有让它工作......
【问题讨论】:
我需要添加它正在工作的程序(中间),因为当我在任何 QLineEdit 中引入一个值时,会放入我没有放入 QLineEdit 的随机值。 【参考方案1】:你正在设置多个布局,改变这个:
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
【讨论】:
message 已解决,但应用程序的功能不是......当我在 QLineEdit 上放置一个值时,它会放置一个我没有放置的随机值......例如,我想在 QLineEdit 中输入 43 作为 decimal ,但它输入了 11013782 而我没有输入... 嗨。这个问题是关于布局问题的。你描述的是一个单独的问题,应该作为一个单独的问题发布。以上是关于尝试将 QLayout“”添加到已经有布局的 convertidorNumericoDialogo“”[重复]的主要内容,如果未能解决你的问题,请参考以下文章