Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使QLineEdit在textChanged信号中发出上一个文本和当前文本_C++_Qt_Subclassing - Fatal编程技术网

C++ 如何使QLineEdit在textChanged信号中发出上一个文本和当前文本

C++ 如何使QLineEdit在textChanged信号中发出上一个文本和当前文本,c++,qt,subclassing,C++,Qt,Subclassing,我想将QLineEdit子类化,以发出一个新的信号,该信号将从文本获得焦点和新文本的那一刻起产生文本 比如: 此QLineEdit的目的是编辑项目的名称,如果项目存在,它将禁用Ok\u按钮(这是在on\u text\u changed(QString)插槽中完成的) 我想检查用户是否改变了主意,是否设置了以前的名称,或者是否撤消了。多亏了 以下子类在聚焦时存储lineEdit文本,然后每当文本更改时检查文本是否与开始时的文本相同,如果不相同,则发出textedcustom(QString) 去头

我想将
QLineEdit
子类化,以发出一个新的信号,该信号将从文本获得焦点和新文本的那一刻起产生文本

比如:

QLineEdit
的目的是编辑项目的名称,如果项目存在,它将禁用
Ok\u按钮
(这是在
on\u text\u changed(QString)
插槽中完成的)

我想检查用户是否改变了主意,是否设置了以前的名称,或者是否撤消了。

多亏了

以下子类在聚焦时存储
lineEdit
文本,然后每当文本更改时检查文本是否与开始时的文本相同,如果不相同,则发出
textedcustom(QString)

去头球

class customQLineEdit: public QLineEdit
{
  Q_OBJECT
public :
  explicit customQLineEdit(QWidget* parent = 0 );
  explicit customQLineEdit(const QString &str, QWidget* parent=0);

signals:
  void textEditedCustom(const QString& text);

public slots:
  void on_Text_Edited_custom(const QString& currentText);

protected:
  QString previousText;
  virtual void focusInEvent(QFocusEvent* e);
};
以及.cpp部分

customQLineEdit::customQLineEdit(QWidget* parent ):
  QLineEdit(parent)
{
  connect(this , SIGNAL(textEdited(QString)) ,
          this , SLOT(on_Text_Edited_custom(QString)));

}

customQLineEdit::customQLineEdit(const QString &str, QWidget* parent):
  QLineEdit(str , parent)
{
  connect(this , SIGNAL(textEdited(QString)) ,
          this , SLOT(on_Text_Edited_custom(QString)));

}


void customQLineEdit::focusInEvent(QFocusEvent* e)
{
  previousText = text();
  QLineEdit::focusInEvent(e);
}

void customQLineEdit::on_Text_Edited_custom(const QString& txt)
{
  if(previousText !=  txt)
    emit textEditedCustom(txt);
}
然后您可以这样订阅它:

connect( nameLineEdit , SIGNAL(textEditedCustom(QString)) , 
          this , SLOT(on_nameLineEdit _Changed(const QString &)));

子类,重写
focusInEvent
,您可以在其中复制成员变量中的当前文本,将
textChanged
自连接到您进行比较的插槽中,并发出信号,说明行编辑是否已实际修改?@peppe是否愿意将此表述为一个答案?If not T.Zak:如果还没有答案,那么写下你所做的事情(包括一些细节/代码)作为你自己问题的答案并接受它并没有错。请注意,如果你使用setText()进行编程更改,事件中就没有焦点。在这种情况下,这不起作用。
connect( nameLineEdit , SIGNAL(textEditedCustom(QString)) , 
          this , SLOT(on_nameLineEdit _Changed(const QString &)));