2017-12-20 19 views
2
int main(int ac, char **av) 
    { 
     QApplication app(ac, av); 
     Dialog *dialog = new Dialog(); 
     dialog->show(); 
     return app.exec(); 
    } 



namespace Ui { 
    class Dialog; 
} 
class Dialog : public QDialog 
{ 
    Q_OBJECT 
public: 
    explicit Dialog(QWidget *parent = 0); 
    ~Dialog(); 
private slots: 
    void onLineEdit(); 
    void onButtonClicked(); 
private: 
    Ui::Dialog *ui; 
}; 
Dialog::Dialog(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::Dialog) 
{ 
    ui->setupUi(this); 
    connect(ui->lineEdit, SIGNAL(editingFinished()), this, SLOT(onLineEdit())); 
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onButtonClicked())); 
} 
Dialog::~Dialog() 
{ 
    delete ui; 
} 
void Dialog::onLineEdit() { 
    qDebug() << QString("line edit finish"); 
} 
void Dialog::onButtonClicked() { 
    qDebug() << QString("button clicked"); 
} 

上記はデモコードですが、機能は非常に簡単で、インターフェイスは写真のとおりです。 The GUI interfaceQLineEditは、QGroupBoxをクリックしたときにフォーカスを解除しません。

この写真では、groupBoxはライン編集「&」プッシュボタンをラップします。 LineEditにテキストを入力したら、マウスを別の場所に移動しますが、groupBox内でLineEditはeditingfinished()信号を出力しません。

このような状況は、lineEditのフォーカスが失われないことを意味します。この問題は本当に奇妙です。何が間違っているのか教えてください。

ありがとうございます。

+2

マウスを動かすだけですか他の場所をクリックしますか? – vahancho

答えて

0

documentation of QLineEdit::editingFinished()に明示的には記載されていませんが、フォーカスは、この場合はkeyboard focusを意味します。 g。 Tabキーまたはを入力します。他のフォーカス可能なウィジェットをクリックしないでマウスカーソルを移動しないでください。

異なる動作を実装して、どのようにそうするべきかわからない場合は、

+0

LineEditはstrongFocusを持ち、他のウィジェットはフォーカスがないので、LineEditはフォーカスを失うことができないため、問題の要点を見つけました。解決策は、他のウィジェットにもフォーカス、タブフォーカス、クリックフォーカスまたは強いフォーカスを持たせることです。これは非常にうまくいく。 –

関連する問題