在已包含一些文本的QTextEdit中显示QLineEdit中的文本并实时更新

jro*_*squ 3 c++ qt qlineedit qtextedit

将文本写入QLineEdit窗口小部件的过程是什么,在QTextEdit已包含某些文本的内部动态显示?

例如,让我们说一个人QLineEdit要求写一个"John"的名字.是否可以在QTextEdit包含的内容中实时显示:

这个名字是 + textFromQLineEdit+ ,24岁

显示的文本必须动态地考虑对其进行的更改,QLineEdit以便用户无需按下按钮或按Enter键以查看他/她的姓名.

以下是使用的信号中的两个小部件彼此连接的最小代码textChanged()QLineEdit与狭槽setText()QTextEdit(不允许用于添加一些文本之前和之后从文本QLineEdit):

#include <QLineEdit>
#include <QVBoxLayout>
#include <QGroupBox>
#include <QTextEdit>
#include <QApplication>

class SmallWindow : public QWidget
{
    Q_OBJECT
public:
    SmallWindow();
private:
    QLineEdit *nameLine;
    QTextEdit *textBox;
};

SmallWindow::SmallWindow() : QWidget()
{
    setFixedSize(300,250);
    QLineEdit *nameLine = new QLineEdit;
    QTextEdit *textBox = new QTextEdit;
    QWidget::connect(nameLine,SIGNAL(textChanged(QString)),textBox,SLOT(setText(QString)));
    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(nameLine);
    layout->addWidget(textBox);
    QGroupBox *group = new QGroupBox(this);
    group->setLayout(layout);
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    SmallWindow window;
    window.show();
    app.exec();
}

#include "main.moc"
Run Code Online (Sandbox Code Playgroud)

应该做些什么来保持文本前后的QLineEdit文本并QTextEdit实时更新框?

Che*_*byl 6

创建特殊插槽:

void SmallWindow::pasteText(const QString& str)
{
    textBox->setText(QString("The name is %1 , age 24").arg(str)); 
}
Run Code Online (Sandbox Code Playgroud)

并且不要使用textChanged()信号,因为您只需要一个用户接受的名称,因此您需要QLineEdit::editingFinished()(或者可能QLineEdit::returnPressed(),这取决于您的需求)

connect(nameLine,SIGNAL(editingFinished(QString)),this,SLOT(pasteText(QString)));
Run Code Online (Sandbox Code Playgroud)

你也不需要QWidget::connect,因为你在QObject子类中编写这段代码,所以没有必要.

还有这些线:

QLineEdit *nameLine = new QLineEdit;
QTextEdit *textBox = new QTextEdit;
Run Code Online (Sandbox Code Playgroud)

应该:

nameLine = new QLineEdit;
textBox = new QTextEdit;
Run Code Online (Sandbox Code Playgroud)