2013-10-05 63 views
0

我是qt的新手,所以我沒有完全獲得信號插槽機制。 這是我的設置。 Dialog類 MainWindow類(具有lineEdit太)在2個窗口之間傳遞數據。 Qt

我有這樣的(它帶有一個名爲 「lineEdit」 lineEdit對話框):

void MainWindow::keyPressEvent(QKeyEvent *event) { 


    int i=event->key(); 
    //char z=(char)i; 



    // connect(ui->lineEdit, SIGNAL(textChanged(QString)), dialog, SLOT(setText(QString))); 

if(i>=48&&i<=57) 

{ 
    QString s= QString::number(i-'0'); 


    q+=s; 
    ui->lineEdit->setText(q); 

} 

我想對話的lineEdit的文本設置爲也是。 我怎麼知道的?

回答

2
  1. 除非你瞭解基礎知識,否則你不會去Qt的任何地方。如果理解文檔不是您的事情,請閱讀隨附的豐富示例代碼。有些人閱讀散文更好,有些閱讀代碼,沒有什麼不對。只要確保這樣做:)

  2. A QLineEdit已經處理它自己的擊鍵。沒有必要重新實現該功能。

  3. 信號插槽連接應該是靜態的,除非您的應用程序正在改變狀態。如果將對象上的信號連接到另一個對象上的某個插槽多次,則可以使用the slot will be called as many times as there are connections

  4. 一對QLineEdits之間傳遞數據的習慣的方法如下:

    connect(ui->lineEdit, SIGNAL(textEdited(QString)), 
         dialog, SLOT(setText(QString))); 
    connect(dialog, SIGNAL(textEdited(QString)), 
         ui->lineEdit, SLOT(setText(QString))); 
    

    你可能想在MainWindow構造函數來設置此連接起來,但在任何情況下,你只想要完成一次

    您應該使用textEdited信號,而不是textChanged信號。當用戶與控件交互以改變它時,前者被釋放。無論是由用戶更改文本還是通過調用setText以編程方式更改後者。如果您在一對控件之間連接了textChangedsetText,則會產生無限循環。 QML足夠聰明地檢測它,但小部件代碼AFAIK不是。

+0

其顯示的錯誤: 的QObject ::連接:不能QLineEdit的:: textEdited(QString的)連接到(空):: seText(S) 我 公共插槽: 無效seText(QString的Q);在我的dialog.h中 和 void Dialog :: seText(QString q) { ui-> qwe-> setText(q); } 在對話框中。cpp –

+0

您確定連接到非空對象嗎?因爲錯誤告訴你,你是。也許你需要在連接之前移動'setupUi'。 –

0

有點晚,但該來看到這個頁面的人,你可以看一點(30分鐘〜!)YouTube視頻,我已經準備...

(顯示:連接到一個數據庫,對話框,信號和槽之間的對話,...)

https://www.youtube.com/watch?v=TEq15So3fUg

乾杯!