实习之遇到QT程序开发时的问题及解决方案
实习之遇到QT程序开发时的问题及解决方案
1.QT中QString和C++中的String转换
·问题:
由于一开始是在codeblocks中编程,一直使用的是String类型,现在将程序移到QT中运行时发现在QT界面中都是识别QString类型。对于之前在codeblocks从文件中输入数据到String类型中,在这时也无法使用。
·解决方案:
将数据通过QT软件自带的QFile文件流输入至QString类型中,再通过QString类型与String类型的转换从而保存至链表中。
//QFile 文件流使用
//使用QTextStream一行一行读一个文本文件QFile fin(":/test_500000.txt");if(!fin.open(QIODevice::ReadOnly | QIODevice::Text))return false;QTextStream cin(&fin);
具体见QFile类的使用
QString---->String
QString qstr;
String str=qstr.toStdString();
String---->QString
String str;
QString qstr=QString::fromStdString(str);
一些int类型、float类型和QString类型的转换也可以仿照上面
QString---->int
QString str="123";
int num=str.toInt();
QString---->float
QString str="123.4";
float fnum=str.toFloat();
int、float---->QString
int num=123;
QString qstr=QString::number(num);
float fnum=123.4;
QString qstr=QString::number(fnum);
2.C++中如何一行一行的读入文本到结构体中
·问题:
当我们在实习时经常会遇到一行一行读入文本问题。
·解决方案:
本人在遇到这个问题时查了多种方案,但较为好用的是使用输入缓冲区重定向,当然也有输入重定向的方法,但是使用该方法之后调用getline()函数一行读入后,需要分割字符串较为复杂。将输入缓冲区重定向之后便可以直接将一行数据读入到对应的int、string、float等类型中而不需再进行分割字符串。
具体代码如下:
#include
#include
#include
#include using namespace std;
int main()
{long sno;//学号string sname; //姓名string age;//年龄string sex; //性别string birth;//出生日期string id;//身份证号string address; //生源地int in_school;//入学日期int out_school;//毕业日期string tel; //电话string college;//学院string special; //专业string po_status;//政治面貌string state;//状态string postcode;//邮编float grade;//学分int i=0,_size;cout <<"请输入测试的数据大小:";cin >> _size;ifstream fin;//输入文件流 include fin.open("./test_1000000.txt");streambuf * backup=cin.rdbuf();//保存cin的输入缓冲区cin.rdbuf(fin.rdbuf());//重定向cin的输入缓冲区为文件的缓冲区while(i<_size){cin >> sno >> sname >> age >> sex >> birth >> id >> address >> in_school >> out_school >> tel >> college >> special >> po_status >> state >> postcode >> grade ;//可以直接读到对应类型中}cin.rdbuf(backup);//恢复cin的输入缓冲区fin.close();//关闭文件流
}
3.C++中将输出至文本文件中
解决方案:采用输出重定向、比较简单、一条语句即可完成。
··但要注意将输出文件名写准确
具体代码:
//将标准输出重定向为文件流“test_1000000.txt"中
freopen("./test_1000000.txt","w",stdout);
4.关于随机数的使用
·问题:
实习时发现如果在极短的时间内调用一条随机数命令两次会发现产生的随机数完全相同,即使设置了随机数种子也是如此。
·解决方案:
将随机数的范围进行调整,是每次执行的随机数命令不同。
代码如下:
#include
#include
srand((unsigned int)time(0));
int num1=rand()%100;
int num2=rand()%99;
//num1和num2的结果不同
5.关于QT程序开发时背景图片的设置
·问题:
在游戏开发实习时需要设置游戏背景图片,但是如果在centerwidget中设置其sheetstyle那么会将子控件的背景格式全部改变。这是我不想要的。
·解决方案:
使用一个和界面一样大小的QLabel设置其QPixmap图片,并置于底层,完美解决问题。
6.关于QT程序开发时音乐循环播放
·这里介绍较为简单一种方法,使用QSound类, 该方法可以使用相对路径,但是音乐文件格式必须是.wav格式,占内存较大,请谨慎使用,毕竟资源内存过大会导致QT程序无法正常运行。(该方法较low)
代码如下:
QSound qsound1=new QSound(":/music/game1.wav");//初始化
qsound1->play();//播放
qsound1->setLoops(-1);//循环播放
qsound1->stop();//停止
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
