【问题标题】:QLineEdit bug in access to its textQLineEdit 访问其文本的错误
【发布时间】:2021-06-06 15:30:26
【问题描述】:

请指导我在从 qlineedit 读取文本时找到这个简化代码的问题。我的代码在 editUser->text() 行中退出。删除此行后,其他一切都正常。

#include ...
QString USERID_LOG="SomeThing";
logDialog::logDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::logDialog)
{
    ui->setupUi(this);
    QLineEdit* editUser= new QLineEdit( this );
    QPushButton* okButton = new QPushButton(tr("OK"));
    connect(okButton, SIGNAL(clicked()), this,SLOT(okSlot()));
     ...
}
void logDialog::okSlot()
{  USERID_LOG=editUser->text();  //////// Error is here
   logDialog::accept();
   return; }

QString logDialog::GetUser()
{
return(USERID_LOG);
}
////////////////////////////logdialog.h/////////////////////////
QT_BEGIN_NAMESPACE
namespace Ui { class logDialog; }
QT_END_NAMESPACE

class logDialog : public QDialog
{
    Q_OBJECT
 public:
    logDialog(QWidget *parent = nullptr);
    ~logDialog();
     QString GetUser();
 public slots:
    void okSlot();
private:
    QLineEdit* editUser;
    QPushButton* okButton;
    Ui::logDialog *ui;
};

【问题讨论】:

  • 错误是什么?
  • 您在构造函数中初始化的editUser 对于构造函数是本地的——它不是同名的类成员。因此,类成员 editUser 未初始化,导致未定义的行为。 okButton 也是如此。
  • @Retired Ninja, it is : 程序意外结束了。
  • @G.M. , 非常感谢你。我删除了 QLineEdit*,它现在可以工作了。

标签: c++ qt qlineedit


【解决方案1】:

考虑你的构造函数...

logDialog::logDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::logDialog)
{
    ui->setupUi(this);
    QLineEdit* editUser= new QLineEdit( this );
    QPushButton* okButton = new QPushButton(tr("OK"));
    connect(okButton, SIGNAL(clicked()), this,SLOT(okSlot()));
     ...
}

线条...

QLineEdit* editUser= new QLineEdit( this );
QPushButton* okButton = new QPushButton(tr("OK"));

重新声明/重新定义两个局部范围的变量editUserokButton,它们会隐藏同名的成员变量。相反,您应该简单地初始化成员变量本身...

editUser= new QLineEdit( this );
okButton = new QPushButton(tr("OK"));

或者,也许更好,在 ctor 的初始化列表中执行初始化...

logDialog::logDialog(QWidget *parent)
    : QDialog(parent)
    , editUser(new QLineEdit(this))
    , okButton(new QPushButton(tr("OK")))
    , ui(new Ui::logDialog)
{
    ui->setupUi(this);
    connect(okButton, SIGNAL(clicked()), this,SLOT(okSlot()));
    ...

【讨论】:

  • 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2020-12-07
相关资源
最近更新 更多