2015-07-04 97 views
0

我使用Qt Designer創建了一個.ui文件,並在文件中創建了一個最初被禁用的PushButton,我也有一個LineEdit。我想要連接LineEdit和PushBotton,以便在LineEdit中更改文本時,PushButton將被啓用,但在信號和插槽中找不到任何此類選項。誰能幫忙?如何在Qt中連接LineEdit和PushButton?

+1

連接'框TextChanged(常量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

你必須寫一個自定義插槽(這很容易)。

添加到您的主窗口申報(.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設計師,請執行下列操作:

  • 右鍵點擊你的MainWindow,「更改信號/插槽」;
  • 通過輸入checkInput()添加您的自定義插槽(「加號」按鈕);
  • 之後,您將可以通過Qt Designer連接您的自定義插槽。
+0

我怎樣才能將這添加到設計器? –

+0

查看最新的答案。 – kefir500

+0

當我右鍵單擊表單時,我沒有任何選項更改信號/插槽。 –

1

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