2012-05-15 53 views
0

我想知道如何列出項目數量,比如我們正在顯示一些日誌。 實際上,我收到了來自網絡的某些數據包,我想在用戶界面上顯示某種日誌。 目前我選擇了List Widget,但我很想知道是否有其他方法可以這樣做?Qt中的日誌列表

回答

0

猜測你的目的只是爲了記錄,你可以使用qDebug(),因爲它是最簡單和最容易記錄的。

+0

,但我想知道什麼是上顯示的Qt上它記錄了最好的部件用戶在GUI上。 –

0

如果你想有一些豐富的功能,如搜索,過濾和排序,我甚至會使用QTreeWidget將數據拆分成列。 List/Tree Widget會很好,因爲你有快速追加,快速刪除。

有的人用文字小部件做這樣的事情,但它有更糟糕的性能自動當有大量的數據。

+0

So Tree Widget在大量數據的性能上比Text Browser好得多? –

+0

基於模型的數據存儲具有比小於或的QTextEdit文字QPlainTextEdit瀏覽器 –

+0

方式更好的性能更好的性能。後兩者對於日誌來說完全沒有用處,並且在過去的一兩年中似乎還沒有解決過性能衰退問題。它們只有在人工修改完成時纔有用。改變他們的內容往往是一個禁忌。我最終編寫了一個自定義LogView類,但使用模型和視圖同樣合理。 –

1

我使用qInstallMsgHandler,然後根據某些命令行開關重定向到GUI,控制檯或日誌文件。如果你有很多消息你可能想要登錄到一個文件,但對於短/突發的線/項目,你可以登錄到自定義的QStringListModel,也可能是一個QListView。

基本上我已經在引用鏈接上的例子擴大和SO Question

#include <qapplication.h> 
#include <stdio.h> 
#include <stdlib.h> 

void myMessageOutput(QtMsgType type, const char *msg) 
{ 
    switch (type) { 
    case QtDebugMsg: 
     fprintf(stderr, "Debug: %s\n", msg); 
     break; 
    case QtWarningMsg: 
     fprintf(stderr, "Warning: %s\n", msg); 
     break; 
    case QtCriticalMsg: 
     fprintf(stderr, "Critical: %s\n", msg); 
     break; 
    case QtFatalMsg: 
     fprintf(stderr, "Fatal: %s\n", msg); 
     abort(); 
    } 
} 

int main(int argc, char **argv) 
{ 
    qInstallMsgHandler(myMessageOutput); 
    QApplication app(argc, argv); 
    ... 
    return app.exec(); 
} 
,可能是太習慣