QT学习之路
QtCreator与QT+VS2008之间的项目转化
1、首先在QTCreator中把项目建立好。
2、在VS2008+QT中建立相同名字的空项目。
3、找到VS2008+QT的workspace将QTcreator中的对应的项目替换vs2008+QT的文件(.ui、.cpp、.h、main.cpp)。
4、在VS2008中进行添加现有项。
5、点击xxx.ui,进行编译,会产生在release文件夹会产生ui_xxxxx.h文件,在点击整个项目的编译运行,在.h文件中,必须包含ui_xxxxx.h文件。由于Qtcreator没有ui_xxxxx.h文件,
6、如果发现无法找到信号与槽,那么在XXX.cpp中的 ui.setUi(this)下面,也就是构造函数中添加。QObject::connect(ui.pushButton_3, SIGNAL(clicked()), this,SLOT(setTimeOfDate()));类似的文件。
由于元对象和元对象编译器的作用,如果以on_pushButton_clicked()的形式,即on_信号_槽函数。那么就不需要进行信号与槽的关联了。
在VS2008+QT中需要新增加功能
1、在xxx.ui中增加相应的界面和槽
2、点击编译xxx.ui.
3、在xxxx.h文件中增加相应的
private slots:
void XXXXX();//增加定义的槽。
4、在XXX.cpp文件中增加槽功能
voidclassname::functionname();
如果没有按照严格的定义去书写槽函数,则必须在构造函数中进行关联
如:QObject::connect(ui.pushButton_3,SIGNAL(clicked()), this, SLOT(setTimeOfDate()));
QT中的文件形式
xxxx.ui文件:图形绘画文件,复杂的图可以在绘画的时候,就弄清楚信号与槽之间的关系,在进行编译。编译后形成ui_xxxx.h文件,里面有相关信号与槽之间的关联定义,也有相关的控件的定义。
xxxx.h文件主要是进行定义变量,由于ui_xxxxx.h文件中包含一群控件的变量,所以该文件必须包含#include “ui_xxxx.h”文件。以及SLOT与全局变量的定义。
xxxx.cpp:主要包括初始化界面,定义信号与槽的关联,对信号与槽的实现三个部分。
main.cpp:
字符串与int之间的转化
Stringto int
intfirst=ui->firstlineEdit->text().toInt();
intto String
ui->resultlineEdit->setText(QString::number(result));
在处理ComboBox、QlistWidget、QtableWidget、QtreeWidget的时候可以巧妙的时候他们的下标号进行判断,取代对其内容的取值。
如在进行加减乘除运算的代码中:if(ui->calWay->currentIndex()==0)代表取值为+号时
QmessageBox相关函数的使用
警告:QMessageBox::warning(this,"Error Message","出入的分母为"+QString::number(second));
信息:QMessageBox::information(this,"ErrorMessage","file save error");
设置固定的对话框
调用系统的一个进程:
点击sure按钮的时候,会触发产生一个开启LineEdit中所写的进程程序。
显示系统当前时间
设置颜色:
voidMainWindow::setColorSlot()
{
QColor color;
color =QColorDialog::getColor(Qt::red,this);
if(color.isValid())
ui->textEdit->setTextColor(color);
else
{
QMessageBox::information(this,"Error Message","ErrorSelect");
}
}
设置字体:
voidMainWindow::setFontSlot()
{
/*
bool ok;
QFont font = QFontDialog::getFont(
&ok,QFont("Helvetica [Cronyx]", 10), this);
if (ok) {
// the user clicked OK and font is set tothe font the user selected
} else {
// the user canceled the dialog; font isset to the initial
// value, in this case Helvetica[Cronyx], 10
}
*/
bool ok;
QFont font=QFontDialog::getFont(&ok,QFont("Helvetica [Cronyx]", 10), this);
if(ok)
{
ui->textEdit->setFont(font);
}
else
{
QMessageBox::information(this,"Error Message","ErrorSelect");
}
}
文件的操作
打开一个文件:
void MainWindow::openFileSlot()
{
saveFileName=QFileDialog::getOpenFileName(this,"OpenFile",QDir::currentPath());//saveFileName是一个在头文件定义过的全局变量
//qDebug()<<"fileName is"+fileName;
if(saveFileName.isEmpty())//如果点击打开了,但是没有选择文件,则什么都不干,出现一个提示信息
{
QMessageBox::information(this,"Error Meassage","Plzselect a file");//this表示窗口是与MainWindow相关联的
return;
}
else
{
QFile *file=new QFile;
file->setFileName(saveFileName);//设计文件名
bool ok=file->open(QIODevice::ReadOnly);//只读的方式进行打开
if(ok)//打开没有错
{
QTextStream in(file);//文本流和文件相关联
ui->textEdit->setText(in.readAll());//将文件读取到textEdit
file->close(); //读完后进行关闭
delete file; //释放 ui中的部件都是属于QGUI的,它内部会自动回收,但是file是属于界面之外的Qcore模块的不会自动回收
//图像界面的只是在delete ui中就可以ui全部释放所有的子类
}
else
{
QMessageBox::information(this,"Error Message","File openerror"+file->errorString());
return;
}
}
}
新建一个文件:
voidMainWindow::newFileSlot(){
if(ui->textEdit->document()->isModified()) //如果被编辑了
{
qDebug()<<"current filemodified";
}
else
{
// qDebug()<<"notmodified";
ui->textEdit->clear();
this->setWindowTitle("Untitle.txt......");
}
}
另存为一个文件:
Qstring saveFileName=QFileDialog::getSaveFileName(this,"SaveFile",QDir::currentPath());//打开保存文件的框,把保存文件名获取
if(saveFileName.isEmpty())//如果没有获得名字就取消了
{
QMessageBox::information(this,"Error Meassage","Plz wirte a name for your file");//this表示窗口是与MainWindow相关联的
return;
}
QFile *file=new QFile; //需要使用文件的形式进行搬运信息
file->setFileName(saveFileName); //在磁盘中的以什么名字存在 一种标志
bool ok=file->open(QIODevice::WriteOnly); //上述把信息以文件的搬运形式,fileName的标志放在磁盘,现在以只写的方式打开
if(ok)
{
QTextStream out(file); //与文件进行关联
out<<ui->textEdit->toPlainText();//转化成纯文本
file->close();//file只是一个工具,从一个设备把IO流搬运到另一个设备后,已经到磁盘了,关掉流
delete file;//释放引用
}
else
{
QMessageBox::information(this,"Error Message","File save error");
return;
}
}
保存一个文件
voidMainWindow::saveFileSlot()
{
if(saveFileName.isEmpty()) //文件名为空的时候说明这个文件原先不存在,所以保存的时候和另存为是相同操作,当然如果打开过,那么文件绝对有名字,saveFileName是在头文件中定义过的一个全局变量。
this->saveAsFileSlot();
else
{
QFile *file=new QFile;
file->setFileName(saveFileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText();
file->close();
delete file;
}
else
{
QMessageBox::information(this,"Error Message","file saveerror");
}
}
}