如何将多个QLineEdit的值合并到一个矩阵中?

问题描述

我对QT还是很陌生,我想做以下事情:

具有一个布局,该布局最初由1个QLineEdit(text)用于输入和1个用于确认它的按钮(button)组成。

然后我想在单击按钮时发送信号SetN(N),并且该信号应激活ArrayEdit(N)插槽,这将更改Laitot以具有N个输入(QLineEdit),以及1个按钮来发送信号在它们中(作为一个数组)进行进一步处理。

我设法完成了第一部分,但是...没有用,我也不知道如何处理此no matching member function错误 这是我班上的代码:

#include "textlayout.h"  

TextLayout::TextLayout()
{ 
    setWindowTitle("Choosing N value");
    resize(200,200);
    auto layout = new QGridLayout(this);
    auto text = new QLineEdit;
    text->resize(10,30);

    auto button = new QPushButton();
    button->setText("set");
    layout->addWidget(text,0);
    layout->addWidget(button,1);
    
    QObject::connect(&button,SIGNAL(SetN())„ this,SLOT(ArrayEdit())); //no matching member function for call to 'connect' 
    int N = text->text().toInt();

    if(N > 0)
    {
        emit SetN(N); 
    }
}

及其头文件:

#ifndef TEXTLAYOUT_H
#define TEXTLAYOUT_H 
#include <QWidget>
#include <QLineEdit>
#include <QLabel>
#include <QPushButton> 
#include <QGridLayout> 
#include <QObject> 

class TextLayout : public QWidget
{ 
     Q_OBJECT 
public: 
     TextLayout(); 
public slots: 
     void ArrayEdit(int N);I 
signals:
    void SetN(int N); 
};
#endif // TEXTLAYOUT_H 

我知道实际上现在我没有在点击时激活此信号,但是...以前我没有意识到这一点,而且我不知道如何通过onclick信号发送参数... 我如何解决该问题以及如何修复此类?

解决方法

您距离这样做不远..让我帮您一点:)

TextLayout::TextLayout()
{ 
    setWindowTitle("Choosing N value");
    resize(200,200);
    /*auto*/ layout = new QGridLayout(this);
    //declare layout in header,cos you will need it later in the slot

    auto text = new QLineEdit;
    text->resize(10,30);

    auto button = new QPushButton();
    button->setText("set");
    layout->addWidget(text,0);
    layout->addWidget(button,1);
    
    //QObject::connect(&button,SIGNAL(SetN())„ this,SLOT(ArrayEdit())); //no matching member function for call to 'connect' 
    //you dont need the QObject cos Textlayout is a QObject so just call connect:
   

    connect(this,&TextLayout::SetN,this,&TextLayout::ArrayEdit); 

    //SetN is not a signal of QButton so you cant connect that like that... instead
    connect(&button,&QPushButton::clicked,[this]()
    {
        int N = text->text().toInt();
        if(N > 0)
        {
            emit SetN(N); 
        }  
    }); 
}
,

如果处理数字值,请使用QSpinBox而不是QLineEdit。然后,您还可以设置限制,并且用户不能输入无效数据。 将QLineEdit用于文本。

Widget.hpp

#pragma once

#include <QWidget>


class QGridLayout;
class QLineEdit;
class QPushButton;
class QSpinBox;


class Widget : public QWidget
{
  Q_OBJECT

public:
  Widget(QWidget *parent = nullptr);
  ~Widget();

private slots:
  void adjustLayout(int n);

private:
  QGridLayout* _layout {};
  QPushButton* _button {};
  QSpinBox* _spinBox {};
  QVector<QLineEdit*> _lineEditVector;
};

Widget.cpp

#include "Widget.hpp"
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QSpinBox>


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
  _layout = new QGridLayout(this);
  _spinBox = new QSpinBox;
  _button = new QPushButton("set");

  _layout->addWidget(_spinBox,0);
  _layout->addWidget(_button,1);

  connect(_button,[this](bool) {
            emit adjustLayout(_spinBox->value());
          });
}


Widget::~Widget() = default;


void Widget::adjustLayout(int n)
{
  for (int i=0; i<n; ++i)
  {
    QLineEdit* lineEdit = new QLineEdit(QString::number(i+1));
    // for later access,keep a reference in the vector:
    _lineEditVector.push_back(lineEdit);
    _layout->addWidget(lineEdit,i + 1,0);
  }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...