在完成某些行编辑后启用按钮

时间:2014-11-20 09:08:09

标签: macos qt

如何在填充某些qlineedit后激活qt中的按钮?因此,在修改了一些行编辑后,该按钮应该被启用

1 个答案:

答案 0 :(得分:1)

创建一个自定义插槽,您可以在其中启用按钮。将QLineEdit::textChanged连接到此插槽(如果您有多行编辑,请将它们全部连接起来):

您的班级标题:

public slots:
    void textChanged();

班上的某个地方:

    ...
    connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(textChanged()));
    ...

void MyClass::textChanged()
{
    ui->button->setEnabled(true);
}

如果您不想在以编程方式更改文本时触发插槽,也可以使用QLineEdit::textEdited信号而不是textChanged

编辑:以下是完整示例,您只需在MainWindow UI中添加行编辑和按钮(我也禁用了UI中的按钮)。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QList>
#include <QLineEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void textChanged();

private:
    Ui::MainWindow *ui;
    QList<QLineEdit*> _editList;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->lineEdit1, SIGNAL(textEdited(QString)), this, SLOT(textChanged()));
    connect(ui->lineEdit2, SIGNAL(textEdited(QString)), this, SLOT(textChanged()));
    connect(ui->lineEdit3, SIGNAL(textEdited(QString)), this, SLOT(textChanged()));
    _editList.append(ui->lineEdit1);
    _editList.append(ui->lineEdit2);
    _editList.append(ui->lineEdit3);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::textChanged()
{
    int modified_count = 0;
    for(int i = 0; i < _editList.length(); i++)
    {
        if(!_editList[i]->text().isEmtpy)
            modified_count++;
    }
    if(modified_count >= 3)
        ui->pushButton->setEnabled(true);
}