无法从 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&)));
我试图从一个简单的 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&)));