我试图从简单的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
答案 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&)));