将文本写入QLineEdit小部件的过程是什么,在已包含某些文本的QTextEdit中动态显示?
例如,让我们说QLineEdit要求一个人写一个“John”的名字.是否可以在包含以下内容的QTextEdit中实时显示:
名字是textFromQLineEdit,24岁?
显示的文本必须动态地考虑对QLineEdit所做的更改,以便用户无需按下按钮或按Enter键即可显示他/她的名字.
以下是使用来自QLineEdit的信号textChanged()和来自QTextEdit的插槽setText()来连接两个小部件的最小代码(它不允许在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"
在QLineEdit文本到位之前和之后保持文本并实时更新QTextEdit框应该怎么做?
解决方法:
创建特殊插槽:
void SmallWindow::pasteText(const QString& str)
{
textBox->setText(QString("The name is %1 , age 24").arg(str));
}
并且不要使用textChanged()信号因为你只需要一个用户接受的名字,所以你需要QLineEdit :: editingFinished()(或者QLineEdit :: returnPressed(),这取决于你的需要)
connect(nameLine,SIGNAL(editingFinished(QString)),this,SLOT(pasteText(QString)));
此外,您不需要QWidget :: connect,因为您在QObject子类中编写此代码,因此没有必要.
还有这些线:
QLineEdit *nameLine = new QLineEdit;
QTextEdit *textBox = new QTextEdit;
应该:
nameLine = new QLineEdit;
textBox = new QTextEdit;
标签:qtextedit,qlineedit,c,qt 来源: https://codeday.me/bug/20190722/1504595.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。