2014-11-20 2 views
0

Как активировать кнопку в qt после того, как некоторые qlineedit были заполнены? Таким образом, кнопка должна активироваться после изменения некоторых строк.включить кнопку после того, как некоторые изменения строки были заполнены

+1

Подключите 'TextChanged()' Сигнал на слот, в котором вы проверить, если есть текст в поле ввода. Включить/отключить кнопку на основе этого – Bowdzone

+0

, но это не одно редактирование, некоторые из них –

+1

@programingdelphi, обрабатывают сигналы от всех них и проверяют содержимое. Если все изменения в строке содержат то, что вам нужно, включите/отключите кнопку. – vahancho

ответ

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, если вы не хотите, чтобы ваш слот запускался, когда текст изменяется программно.

EDIT: Вот полный пример, вам просто нужно добавить редактирование строки и кнопку в пользовательском интерфейсе MainWindow (я также отключил кнопку в пользовательском интерфейсе).

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); 
} 
+0

это не работает хорошо –

+0

, потому что кнопка не включена (true) –

+0

код в class.h: общедоступные слоты: void enableButton(); код в class.cpp: void ClassName :: enableButton() {ui-> pushButton-> setEnabled (true);} и соединительная часть: connect (ui-> lineEdit, SIGNAL (textEdited()), ui-> pushButton, SLOT (enableButton)); –

Смежные вопросы