【问题标题】:How to connect LineEdit and PushButton in Qt?如何在 Qt 中连接 LineEdit 和 PushButton?
【发布时间】:2015-07-04 17:42:54
【问题描述】:

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

【问题讨论】:

  • textChanged(const QString & text) 与调用pushButton->setEnabled(true) 的自定义槽连接。我想您可能还想将text.isEmpty() 签入该插槽
  • @Miki 我正在使用 Qt 4.8 Designer,我正在创建 ui 文件而不是编码。
  • 我很确定您可以/必须编写您的自定义插槽...stackoverflow.com/questions/7964869/…
  • 您是说我们无法通过 Designer 做到这一点吗?
  • 我是说我认为您没有适合您需求的 标准 插槽,所以请自己编写。您应该仍然可以连接到 Designer 中的该插槽。

标签: qt


【解决方案1】:

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

将此添加到您的 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,请执行以下操作:

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

【讨论】:

  • 如何将它添加到 Designer??
  • 当我右键单击表单时,我没有得到任何更改信号/插槽的选项。
  • 在连接信号/插槽(F4)时,您也可以通过在“配置连接”窗口中按“编辑...”按钮来获得此对话框。
  • 这个插槽是 MainWindow 的成员,这就是它适用于 MainWindow 的原因。对于这种特殊情况,您需要连接 LineEdit 和 MainWindow(不是您的按钮)信号和插槽。
  • 当我为 MainWindow 创建一个 slot() 时如何定义它。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2014-07-25
    • 2022-06-10
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多