151-文本流读/写文本文件-【扫盲】
本帖最后由 不二如是 于 2016-11-4 16:31 编辑没错啦,只要把上面的帮助文档,翻一下,就是这一贴啦~
好,开始翻译~
QTextStream类提供了一个方便的接口来读/写文本,可以在QIODevice、QByteArray、QStrirng上进行操作。
使用QTextStream的流操作符(<<),可以方便的读/写单词、行、数字。
对于生成文本,QTextStream对字段填充、对齐、数字格式提供了选项支持~
QFile data("output.txt");
if (data.open(QFile::WriteOnly | QFile::Truncate)) {
QTextStream out(&data);
out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
// writes "Result: 3.14 2.7 "写入Resule:3.14 2.7
}
QTextStream提供的所有格式选项可以在该类的帮助文档进行查看。
setDevice()、setString()同样可以设置QTextStream要操作的设备或者字符串。
在内部,QTextStream使用了一个基于Unicode的缓冲区。主要就是用来Mingw482支持中文的哈~
重点来了~
使用QTextStream读取文本文件一般使用一下3种方式!
[*]进行一行接着一行的读取
调用readLine()或者readAll()进行行读取~举一个之前用过的代码:
QFile file(“in.txt”);
if(! file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while(! in.atEnd())
{
//进行行读取
QString line = in.readLine();
}
[*]一个单词接着一个单词
QTextStream支持到QString、QByteArray、char *缓冲区的流,单词由空格分开,而且可以自动跳过前导空格。
[*]一个字符接着一个字符
使用QChar或者char类型的流,用于解析文件、使用独立的字符编码和行结束语义时方便处理。
skipWhiteSpace()可用来跳过空格~
默认的,当从文本流中读取数字时,QTextStream会自动检测数字的基数表示。
QTextStream in("0x50 0x20");
int firstNumber, secondNumber;
in >> firstNumber; // firstNumber == 80
in >> dec >> secondNumber; // secondNumber == 0
char ch;
in >> ch; // ch == 'x'
如果数字以‘0x’开头,自动假定为十六进制形式。
1~9开头,自动假定为十进制。
Qt提供了一个基于QTextStream、QFile、QDir的示例程序-
Find Files Dialog
很牛x~
有兴趣自己看啦~
本帖最后由 wei_Y 于 2016-11-5 20:18 编辑
不二,我发现了Qt一个有趣的问题。
当然是PYQT。。
我把一个Qt对象写在类里面就会正常执行,写在函数里就不会正常执行。
比如有一个
class Message(QMessageBox):
.......
就是一个继承了MessageBox的类。
我如果是在另一个类里:
class Main(QWidgets):
.....
msg = Message()
msg.exec()
他会正常显示Message并且可以正常交互退出。
但是我如果把他搞在一个函数里。
def fff():
msg = Message()
msg.exec()
然后他 有时会显示出Message 但是不可交互而且界面会卡死,有时直接卡死。
类似的我又试了QNetworkAccessManager也是一样的问题。
还有一个问题:
Message自定义大小好像没用?
resize 和 setFixedsize都试了。 wei_Y 发表于 2016-11-5 19:25
不二,我发现了Qt一个有趣的问题。
当然是PYQT。。
1.当你把某个类写进一个函数,要确定是否真的继承了这个类,没有的话,在最上面加上类似#include<QMessageBox>声明
2Message自定义大小?是用来限制传递信息大小吗?
不二如是 发表于 2016-11-6 14:02
1.当你把某个类写进一个函数,要确定是否真的继承了这个类,没有的话,在最上面加上类似#include声明
...
我就是实例化了这个继承自QT 类的自定义类。
然后如果是在另一个实例化的类里可以很好的执行,否则就不能执行其功能。
我猜是那个Application的问题。
自定义大小是 Message窗口的大小,不是内容的大小。
本来用QMessageBox觉得比较方便。。看来还是要换成QDialog了。 wei_Y 发表于 2016-11-6 14:12
我就是实例化了这个继承自QT 类的自定义类。
然后如果是在另一个实例化的类里可以很好的执行,否则就 ...
是阿,这就是为什么要分成QApplication->QWidget、QMainWindow、QDialog
彼此间是有不同功能区别的
有的可以直接调用某类,有的需要声明,但区别也就如此
不二如是 发表于 2016-11-6 14:15
是阿,这就是为什么要分成QApplication->QWidget、QMainWindow、QDialog
彼此间是有不同功能区别的
还有个新问题。 wei_Y 发表于 2016-11-6 14:19
还有个新问题。
请讲:最好在你类似的帖子下面回复~
为后人扫清障碍{:10_257:} 不二如是 发表于 2016-11-6 14:15
是阿,这就是为什么要分成QApplication->QWidget、QMainWindow、QDialog
彼此间是有不同功能区别的
Qt4 里用 QApplication -> winEventFilter 可以捕获windows系统消息。
Qt5 里变成 QAbstractNativeEventFilter -> nativeEventFilter。
虽然确实是捕获到了windows消息。。
但是——c++里用reinterpret_cast 这个函数(还是內建函数!!!)转换成0x011这样的形式。
但是python里木有reinterpret_cast 这个函数,
我试了QByteArray里所有的函数都不能转化成0x011这个形式。(toHex看着美好结果转出来是什么鬼!)
然后判断不了是什么消息啊。。
问题是:怎么判断 收入的消息类型。
最终目标是:全局热键捕获。 不二如是 发表于 2016-11-6 14:21
请讲:最好在你类似的帖子下面回复~
为后人扫清障碍
2333,还没出到全局热键的文章。 wei_Y 发表于 2016-11-6 14:28
2333,还没出到全局热键的文章。
会的~
我现在手头笔记本没法搞Qt,周一我试试告诉你结果哈~ wei_Y 发表于 2016-11-6 14:25
Qt4 里用 QApplication -> winEventFilter 可以捕获windows系统消息。
Qt5 里变成 QAbstractNativeEvent ...
1.
QByteArray ba;
ba.resize(5);
ba = 0x3c;
ba = 0xb8;
ba = 0x64;
ba = 0x18;
ba = 0xca;
QByteArray 支持判断信息类型。。。并且初始化0x -也就是16进制
2.直接强制换。。。
十进制->十六进制
i=1024;
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("i=%d,hs=%s\n",i,hs);
二进制-十六进制
strcpy(bs,"00000000000000000000010000000000");
i=strtol(bs,&e,2);
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("bs=%s,hs=%s\n",bs,hs);
字符-十六进制
strcpy(s,"a汉");
i=0;
while (1) {
if (0==s) break;
sprintf(hs+i*2,"%02X",(unsigned char)s);
i++;
}
setlocale(LC_ALL,"chs");
printf("s=%s,hs=%s\n",s,hs);
不二如是 发表于 2016-11-7 09:31
1.
换成win32的api了。。始终没搞定qt。。 wei_Y 发表于 2016-11-10 12:24
换成win32的api了。。始终没搞定qt。。
你要电脑上安装VS2010那些库、Qt很好搞
页:
[1]