无法输出到 QTextEdit
Can't output to QTextEdit
我的程序应该:
- 从 QLineEdits 收集一些输入;
- 将其转换为QString;
- 将它添加到一些常量的QStrings中;
- 单击按钮时在 QTextEdit 中输出全部内容。
下面是程序的简化模型。可以编译;我没有错误;但是,它不能满足我的需要。它只是无法输出,我真的不知道为什么。我费了好大劲才让它不显示任何错误,现在我 运行 没主意了。有人可以帮我吗?
#include <QtGui>
#include <QtCore>
class MyObject : public QObject
{
Q_OBJECT
public:
QTextEdit text;
QString c;
public slots:
void onClicked() {
text.setText(c);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget mw;
mw.setWindowTitle("Main Window");
mw.resize(400, 400);
mw.show();
QLabel label ("Enter something:", &mw);
label.setAlignment(Qt::AlignHCenter);
label.show();
QLineEdit line (&mw);
line.show();
QString a = line.text();
QString b = "This line is to be added";
QString c = a+b;
QTextEdit text (&mw);
text.show();
QPushButton btn ("Convert", &mw);
MyObject obj;
QObject::connect(
&btn,
SIGNAL(clicked()),
&obj,
SLOT(onClicked()));
btn.show();
QVBoxLayout layout_mw;
layout_mw.addWidget(&label);
layout_mw.addWidget(&line);
layout_mw.addWidget(&btn);
layout_mw.addWidget(&text);
mw.setLayout(&layout_mw);
return app.exec();
}
#include "sample.moc"
根据您提供的代码,您似乎不知道:
Qt 工作异步,比如你得到的a
的值是在显示window之前,什么值会有吗?好吧,它将有一个空字符串,那么我应该在什么时候请求文本呢?就在按下按钮时调用的插槽中。
同名变量并不代表它们是相同的,比如你有2个QTextEdit,名字都是text,它们是不同的对象。
所以当你意识到对象(小部件)必须具有相同的范围才能相互交互时,所以我将创建一个 class 继承自 QWidget 并将其他元素作为属性.
#include <QtGui>
#include <QtCore>
class Widget: public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent=nullptr):
QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(&label);
layout->addWidget(&line);
layout->addWidget(&button);
layout->addWidget(&textedit);
label.setText("Enter something:");
label.setAlignment(Qt::AlignHCenter);
button.setText("Convert");
connect(&button, SIGNAL(clicked()), this, SLOT(onClicked()));
}
private slots:
void onClicked(){
QString a = line.text();
QString b = "This line is to be added";
QString c = a+b;
textedit.setText(c); // or textedit.append(c);
}
private:
QLabel label;
QLineEdit line;
QPushButton button;
QTextEdit textedit;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Widget w;
w.show();
return app.exec();
}
#include "sample.moc"
我的程序应该:
- 从 QLineEdits 收集一些输入;
- 将其转换为QString;
- 将它添加到一些常量的QStrings中;
- 单击按钮时在 QTextEdit 中输出全部内容。
下面是程序的简化模型。可以编译;我没有错误;但是,它不能满足我的需要。它只是无法输出,我真的不知道为什么。我费了好大劲才让它不显示任何错误,现在我 运行 没主意了。有人可以帮我吗?
#include <QtGui>
#include <QtCore>
class MyObject : public QObject
{
Q_OBJECT
public:
QTextEdit text;
QString c;
public slots:
void onClicked() {
text.setText(c);
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget mw;
mw.setWindowTitle("Main Window");
mw.resize(400, 400);
mw.show();
QLabel label ("Enter something:", &mw);
label.setAlignment(Qt::AlignHCenter);
label.show();
QLineEdit line (&mw);
line.show();
QString a = line.text();
QString b = "This line is to be added";
QString c = a+b;
QTextEdit text (&mw);
text.show();
QPushButton btn ("Convert", &mw);
MyObject obj;
QObject::connect(
&btn,
SIGNAL(clicked()),
&obj,
SLOT(onClicked()));
btn.show();
QVBoxLayout layout_mw;
layout_mw.addWidget(&label);
layout_mw.addWidget(&line);
layout_mw.addWidget(&btn);
layout_mw.addWidget(&text);
mw.setLayout(&layout_mw);
return app.exec();
}
#include "sample.moc"
根据您提供的代码,您似乎不知道:
Qt 工作异步,比如你得到的
a
的值是在显示window之前,什么值会有吗?好吧,它将有一个空字符串,那么我应该在什么时候请求文本呢?就在按下按钮时调用的插槽中。同名变量并不代表它们是相同的,比如你有2个QTextEdit,名字都是text,它们是不同的对象。
所以当你意识到对象(小部件)必须具有相同的范围才能相互交互时,所以我将创建一个 class 继承自 QWidget 并将其他元素作为属性.
#include <QtGui>
#include <QtCore>
class Widget: public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent=nullptr):
QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(&label);
layout->addWidget(&line);
layout->addWidget(&button);
layout->addWidget(&textedit);
label.setText("Enter something:");
label.setAlignment(Qt::AlignHCenter);
button.setText("Convert");
connect(&button, SIGNAL(clicked()), this, SLOT(onClicked()));
}
private slots:
void onClicked(){
QString a = line.text();
QString b = "This line is to be added";
QString c = a+b;
textedit.setText(c); // or textedit.append(c);
}
private:
QLabel label;
QLineEdit line;
QPushButton button;
QTextEdit textedit;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Widget w;
w.show();
return app.exec();
}
#include "sample.moc"