如何在Qt中连接LineEdit和PushButton?

时间:2015-07-04 17:42:54

标签: qt

我使用Qt Designer创建了一个.ui文件,在我创建的PushButton文件中最初被禁用,我也有一个LineEdit。我希望关联LineEditPushBotton,以便在LineEdit中更改文字后,PushButton将启用,但我在信号中找不到任何此类选项和插槽。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

你必须写一个自定义插槽(这很简单)。

将此添加到您的MainWindow声明( .h 文件):

private slots:
    void checkInput(const QString &text);

您的 .cpp 文件:

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,请执行以下操作:

  • 右键单击您的MainWindow,"更改信号/插槽";
  • 输入 checkInput();
  • 添加自定义广告位("加号"按钮)
  • 在此之后,您将能够通过Qt Designer连接自定义插槽。

答案 1 :(得分:1)

在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());
    });
    ...
}