2011-11-07 38 views
1

我遇到問題。當我的Addtext函數被調用時,我的文本編輯框似乎沒有更新。無法更新文本編輯文本QT

這裏是我添加文本

void CTextBox::AddText(QString string, QString spriteString) 
{ 

    textBrowser->setText(string + spriteString); 
    update(); 

} 

然後另一類調用該函數,它應該添加文本到文本框,但事實並非如此。有任何想法嗎?

歡呼

+0

什麼是textBrowser?我想這是一個QTextEdit *。你如何創建它;通過QDesigner還是通過代碼? – pnezis

+0

隨着代碼,我原本是要做一個QTestBrowser,但改變它,忘了改變變量名稱。 – Bushes

+0

我認爲你需要展示更多的代碼才能找出問題所在。 'update'不應該是必須的 - 改變文本將導致'QTextEdit'被重新繪製。你確定函數實際上被調用嗎? (使用qDebug()並確認。) –

回答

1

你怎麼稱呼CTextBox :: AddText()? update()僅在程序返回到事件循環時安排paintEvent()以備後用。這意味着,

  1. 你實際上需要有一個事件循環,即。在某些時候你需要撥打qApp->exec();

  2. 你需要允許PROGRAMM一些時間來qApp->processEvents()(插入update())後,如果您想要的任何paining阻塞while() {...}或類似的東西內完成。

編輯:試想想起來了,你甚至不應該需要調用update()也不processEvents()如果你的程序AddText後返回到事件循環一段時間,所以真的似乎與事件的問題循環。發佈你的main.cpp,是嗎?

+0

每次需要添加新文字時,我都會打電話給他。 – Bushes

+0

addtext(創建的節點,節點名稱)。我試圖用我自己的方法替換printf。 – Bushes

+0

基本上我想要做同樣的事情。 – Bushes

1

這是一個聽起來像你試圖做的簡單例子。也許你可以看到你的設計不同?

注意:沒有明確的update()是必要的。我認爲那是一隻紅鯡魚。我認爲更有可能的是(1)你以某種方式用空字符串調用你的AddText方法,或者(2)你的真實文本編輯是一個不同的變量,並以某種方式創建了其中兩個,並更新一個只存在在內存中,並且從未添加到佈局。也許你的FileLoaderQT的代碼會有所幫助? (你可以編輯你的問題,而不是發表評論。)

#include <QtGui> 
int main(int argc, char **argv) { 
    QApplication app(argc, argv); 
    QMainWindow w; 
    QTextEdit *edit = new QTextEdit; 
    w.setCentralWidget(edit); 
    edit->setText("Hello world!"); 
    w.show(); 
    edit->append("Hello world again!"); 
    return app.exec(); 
}