2015-07-04 4 views
0

Я создал файл .ui с помощью Qt Designer, и в файле я создал PushButton, который отключен изначально, у меня также есть LineEdit. Я хочу подключить LineEdit и PushBotton так, чтобы при изменении текста в LineEdit PushButton был включен, но я не нашел такой опции в сигналах и слотах. Может ли кто-нибудь помочь?Как подключить LineEdit и PushButton в Qt?

+1

подключения 'TextChanged (Const QString & текст)' с пользовательским слотом, который вызывает 'pushButton- > setEnabled (истина) '. Я думаю, вы также можете проверить 'text.isEmpty()' в этот слот – Miki

+0

@Miki Я использую Qt 4.8 Designer, я создаю файлы ui, а не кодирование. –

+0

Я уверен, что вы можете/должны писать свои пользовательские слоты ... http://stackoverflow.com/questions/7964869/qt-designer-how-to-add-custom-slot-and-code-to- a-button – Miki

ответ

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.
+0

Как добавить это в конструктор? –

+0

См. Обновленный ответ. – kefir500

+0

Когда я нажимаю правой кнопкой мыши на форме, я не получаю никакой опции для изменения сигналов/слотов. –

1

В Qt 5, вы вообще не должны тривиальных закрытых слотов и должны использовать лямбды вместо:

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()); 
    }); 
    ... 
} 
Смежные вопросы