Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt中的日志列表_Qt_List - Fatal编程技术网

Qt中的日志列表

Qt中的日志列表,qt,list,Qt,List,我想知道怎样才能像显示一些日志一样列出项目的数量。 实际上,我从网络上收到了一些数据包,我想在GUI上为用户显示一些日志。 目前我选择了列表小部件,但我想知道是否还有其他方法可以做到这一点?猜测您的目的只是为了登录,您可以使用qDebug(),因为它是最简单、最容易登录的工具。如果您想拥有一些丰富的功能,如搜索,过滤和排序我甚至会使用QTreeWidget将数据拆分为列。列表/树小部件会很好,因为您有快速附加、快速删除功能 有些人使用文本小部件来做这类事情,但当有大量数据时,它的性能更差。我使用

我想知道怎样才能像显示一些日志一样列出项目的数量。 实际上,我从网络上收到了一些数据包,我想在GUI上为用户显示一些日志。
目前我选择了列表小部件,但我想知道是否还有其他方法可以做到这一点?

猜测您的目的只是为了登录,您可以使用
qDebug()
,因为它是最简单、最容易登录的工具。

如果您想拥有一些丰富的功能,如搜索,过滤和排序我甚至会使用QTreeWidget将数据拆分为列。列表/树小部件会很好,因为您有快速附加、快速删除功能

有些人使用文本小部件来做这类事情,但当有大量数据时,它的性能更差。

我使用文本小部件,然后根据一些命令行开关重定向到GUI、控制台或日志文件。如果您有很多消息,您可能希望登录到一个文件,但是对于短时间的行/项突发,您可以登录到一个自定义的,可能还有一个QListView

基本上,我已经在参考链接和

#包括
#包括
#包括
void myMessageOutput(QtMsgType类型,const char*msg)
{
开关(类型){
案例QtDebugMsg:
fprintf(stderr,“调试:%s\n”,msg);
打破
案例QtWarningMsg:
fprintf(stderr,“警告:%s\n”,msg);
打破
案例QTSG:
fprintf(标准,“关键:%s\n”,消息);
打破
案例QTALMSG:
fprintf(stderr,“致命:%s\n”,msg);
中止();
}
}
int main(int argc,字符**argv)
{
qInstallMsgHandler(myMessageOutput);
QApplication应用程序(argc、argv);
...
返回app.exec();
}

这也可以使用,但我想知道在Qt上为用户在GUI上显示登录到它的最佳小部件是什么。因此,对于大量数据,树小部件的性能要比文本浏览器好得多?基于模型的数据存储比文本浏览器的性能要好得多。后两种方法对于日志来说完全没有用处,并且在过去一两年中似乎出现了未解决的性能倒退。它们只有在以人的速度进行修改时才有用。经常更改它们的内容是不可能的。我最终编写了一个定制的LogView类,但使用模型和视图同样可行。
 #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();
 }