无法从 QLineEdit 检索文本值

Can't retrieve text value from QLineEdit

我试图从一个简单的 QLineEdit 函数中检索 text() 值,但我无法让它工作,我是 Qt 的新手,所以我有点迷路,尤其是在使用指针时.

在我的 ui_Ventas2.h 文件中,Qt 已经初始化了所有 classes

QLineEdit *lineClienteNo;

但是当我想检索文本时,我会在 main.cpp 文件

上执行类似的操作
QLineEdit *ClienteNo;
ClienteNo->lineClienteNo.text();

我正在做一些非常基础的事情,但我做不到 link,这是我的完整代码:

#include <QApplication>
#include "Ventas2.h"
#include "ui_Ventas2.h"

int main(int argc, char *argv[]) {

QApplication app(argc, argv);
Ventas2 VentanaPrincipal;
VentanaPrincipal.show();

QLineEdit *ClienteNo;
ClienteNo->lineClienteNo.text();

return app.exec();
}

我是否应该在我的 Ventas2.h 头文件上创建一个新的 class 到 link 从 Qt 创建的 class 以使其工作或其他什么??

注意:我在 Mac

上使用 Netbeans 8.1 和 Qt Framework 5.7

嗯,对于初学者来说,ClienteNo 是一个指向任何东西的指针。即使它是指向 QLineEdit 的指针,ClienteNo->lineClienteNo.text(); 也不会起作用,因为 ClienteNo 是指向没有 lineClienteNo 成员的 QLineEdit 的指针, 但即使它有它,它也没有任何效果,因为你没有对返回值做任何事情。

看起来您正在为您的小部件使用设计器生成的表单,因此为了从外部访问它,您需要在 Ventas2.h [=25= 中创建 ui 指针].那么你可以:

QString text = VentanaPrincipal.ui->lineClienteNo->text();
// do something with text

听起来您需要先熟悉一下编程语言和框架,然后再尝试在实践中使用它们。

好的,我的第一个问题有误,我尝试访问的 class 来自 Qt 生成的名为 ui_Ventas.h 的头文件,但通用头文件名为 Ventas2.h 它有这个代码

#ifndef _VENTAS2_H
#define _VENTAS2_H

#include "ui_Ventas2.h"

class Ventas2 : public QMainWindow {
Q_OBJECT
   public:
     Ventas2();
     virtual ~Ventas2();
   private:
Ui::Ventas2 widget;
};

#endif /* _VENTAS2_H */

但我正在尝试从 ui_Ventas2.h 获取文本,QLineEdit class 调用 LineClienteNo

#ifndef UI_VENTAS2_H
#define UI_VENTAS2_H

....
#include <QtWidgets/QLineEdit>
....

class Ui_Ventas2
{
public:
   QLineEdit *lineClienteNo;
   QWidget *centralwidget;
   QPushButton *pushButtonOk;
   QLabel *label_Cliente;
   QWidget *widget;

我使用了你在 post 中使用的东西,它找到了我需要的东西

QString text = Ui_Ventas2.lineClienteNo->text();

我得到下一个错误

main.cpp:26:20: error: 'Ui_Ventas2' does not refer to a value
   QString text = Ui_Ventas2.lineClienteNo->text();
               ^
./ui_Ventas2.h:30:7: note: declared here
    class Ui_Ventas2

我想我明白了,但我不明白为什么如果我找到了我需要的 class,它总是给我错误,我已经检查了有关它的教程

注意:我的错误,我需要先在Ventas2.h头文件中声明public槽

public slots:
  void textChanged(const QString& text);

然后在 Ventas2.cpp.cc 文件中声明函数

void Ventas2::textChanged(const QString& text) 
 {
if (0 < text.trimmed().length())
  { widget.lineEditMostrar->setText(text.trimmed());
  }
else {
   widget.lineEditMostrar->clear();
  }
}

然后,使用Qt的connect函数将所有连接在一起

Ventas2::Ventas2() {
  widget.setupUi(this);

  connect(widget.lineClienteNo,SIGNAL(textChanged(const QString&)),this,SLOT(textChanged(const QString&)));