如何连接Qt中的LineEdit和Button?

如何连接Qt中的LineEdit和Button?,qt,Qt,我使用Qt Designer创建了一个.ui文件,并在该文件中创建了一个最初禁用的按钮,我还有一个行编辑。我想连接LineEdit和PushBotton,以便在LineEdit中更改文本时,按钮将启用,但在信号和插槽中找不到任何此类选项。有人能帮忙吗?您必须编写一个自定义插槽(这很容易) 将此添加到主窗口声明(.h文件): 您的.cpp文件: private slots: void checkInput(const QString &text); MainWindow::Mai

我使用Qt Designer创建了一个.ui文件,并在该文件中创建了一个最初禁用的
按钮
,我还有一个
行编辑
。我想连接
LineEdit
PushBotton
,以便在
LineEdit
中更改文本时,
按钮将启用,但在信号和插槽中找不到任何此类选项。有人能帮忙吗?

您必须编写一个自定义插槽(这很容易)

将此添加到主窗口声明(.h文件):

您的.cpp文件:

private slots:
    void checkInput(const QString &text);
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkInput(QString)));
}

void MainWindow::checkInput(const QString &text)
{
    ui->pushButton->setEnabled(!text.isEmpty());
}
要将此插槽添加到Qt Designer,请执行以下操作:

  • 右键单击主窗口“更改信号/插槽”
  • 通过输入checkInput(),添加自定义插槽(“加号”按钮)
  • 之后,您将能够通过Qt Designer连接自定义插槽

    • 您必须编写自定义插槽(这非常简单)

      将此添加到主窗口声明(.h文件):

      您的.cpp文件:

      private slots:
          void checkInput(const QString &text);
      
      MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(checkInput(QString)));
      }
      
      void MainWindow::checkInput(const QString &text)
      {
          ui->pushButton->setEnabled(!text.isEmpty());
      }
      
      要将此插槽添加到Qt Designer,请执行以下操作:

      • 右键单击主窗口“更改信号/插槽”
      • 通过输入checkInput(),添加自定义插槽(“加号”按钮)
      • 之后,您将能够通过Qt Designer连接自定义插槽

      在Qt 5中,您通常不需要琐碎的专用插槽,而应该使用lambdas:

      MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          connect(ui->lineEdit, &QLineEdit::textChanged, [this](const QString & text) {
            ui->pushButton->setEnabled(!text.isEmpty());
          });
          ...
      }
      

      在Qt 5中,您通常不需要琐碎的专用插槽,而应该使用lambdas:

      MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          connect(ui->lineEdit, &QLineEdit::textChanged, [this](const QString & text) {
            ui->pushButton->setEnabled(!text.isEmpty());
          });
          ...
      }
      

      textChanged(const QString&text)
      与调用
      按钮->设置启用(true)
      的自定义插槽连接。我想您可能还需要检查
      text.isEmpty()
      slot@Miki我正在使用Qt4.8设计器,我正在创建ui文件而不是编码。我非常确定您可以/必须编写自定义插槽。。。你是说我们不可能从Designer那里做到这一点吗?我是说我不认为你有适合你需要的标准插槽,所以写你自己的。您应该仍然能够连接到设计器中的该插槽。使用调用
      按钮->设置启用(true)
      的自定义插槽连接
      textChanged(const QString&text)
      。我想您可能还需要检查
      text.isEmpty()
      slot@Miki我正在使用Qt4.8设计器,我正在创建ui文件而不是编码。我非常确定您可以/必须编写自定义插槽。。。你是说我们不可能从Designer那里做到这一点吗?我是说我不认为你有适合你需要的标准插槽,所以写你自己的。您仍然可以连接到设计器中的该插槽。如何将其添加到设计器?当我右键单击窗体时,我没有任何更改信号/插槽的选项。您也可以在连接信号/插槽(F4)时按“配置连接”窗口中的“编辑…”按钮来获得此对话框。该插槽是主窗口成员,这就是为什么它适用于MainWindow。对于这种特殊情况,您需要连接LineEdit和MainWindow(不是您的按钮)信号和插槽。当我为MainWindow创建一个插槽时,如何定义插槽()。如何将其添加到设计器?当我右键单击窗体时,我没有任何更改信号/插槽的选项。您也可以通过按“编辑…”来获得此对话框连接信号/插槽(F4)时,“配置连接”窗口中的按钮。此插槽是MainWindow成员,这就是为什么它适用于MainWindow。对于这种特殊情况,您需要连接LineEdit和MainWindow(而不是您的按钮)信号和插槽。当我为MainWindow创建插槽时,如何定义插槽()。