无法从QLineEdit

时间:2016-12-16 01:18:55

标签: c++ qt netbeans qlineedit

我试图从简单的QLineEdit函数中检索text()值,但我无法使其正常工作,我是Qt的新手,所以我有点迷失,特别是在使用指针时。

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

QLineEdit *lineClienteNo;

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

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

我做了一些非常基本的事情,但我无法将其链接起来,这是我的完整代码:

#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头文件上创建一个新类来链接Qt中创建的类以使其工作吗?

注意:我在Mac上使用Netbeans 8.1和Qt Framework 5.7

2 个答案:

答案 0 :(得分:2)

嗯,对于初学者来说,ClienteNo是指向任何事物的指针。即使它是指向QLineEdit的指针,ClienteNo->lineClienteNo.text();也无效,因为ClienteNo是指向QLineEdit的指针,该lineClienteNo没有ui成员,但即使它有它,也没有效果,因为你没有对返回的值做任何事情。

看起来您正在为您的小部件使用设计器生成的表单,因此要从外部访问它,您需要在Ventas2.h公开中使用QString text = VentanaPrincipal.ui->lineClienteNo->text(); // do something with text 指针。然后你可以:

last

在尝试在实践中使用它们之前,您需要先熟悉一下编程语言和框架。

答案 1 :(得分:0)

Ok meabe我的第一个问题是错误的,我试图访问的类来自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类调用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;

我使用的东西就像你在帖子中找到的那样,它找到了我需要的东西

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

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

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

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();
  }
}

然后,使用connect Qt Function连接所有

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

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