QT学习笔记2:QT中常用函数

一、QString转number

QString number(long n, int base = 10)

QString number(ulong n, int base = 10)

QString number(int n, int base = 10)

QString number(uint n, int base = 10)

QString number(qlonglong n, int base = 10)

QString number(qulonglong n, int base = 10)

QString number(double n, char format = 'g', int precision = 6)

整形的转换格式都是一样的,第一个参数是十进制要转换的整数,第二个参数指定以什么进制来转换,默认是十进制,比如:

QString strNumDec = QString::number(55, 10);  //转化成10进制

QString strNumHex = QString::number(55, 16);    //16进制

QString strNumBit = QString::number(55, 2);     //2进制

第二个参数base必须在[2,36]之间,当base为10以外的值时,第一个参数n将被视为无符号整数。

 

二、number 转 QString

double toDouble(bool * ok = 0) const
float toFloat(bool * ok = 0) const
int toInt(bool * ok = 0, int base = 10) const
long toLong(bool * ok = 0, int base = 10) const
qlonglong toLongLong(bool * ok = 0, int base = 10) const
short toShort(bool * ok = 0, int base = 10) const

QString也提供了一系列转换成数值的函数,参数ok指示转换是否出错,参数base指示当前QString是什么进制,如

QString str = "55";
bool ok;

int numBit = str.toInt(&ok, 2);

int numOct = str.toInt(&ok, 8);

int numDec = str.toInt(&ok, 10);

int numHex = str.toInt(&ok, 16);

 三、QPixmap加载图片并获取图片宽和高

void Dialog::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPixmap pix;
    //加载图片
    pix.load("D:\\1001.jpg");
    //获得图片的宽和高
    qreal width = pix.width(); 
    qreal height = pix.height();
    //图片放大两倍
    pix = pix.scaled(width*2,height*2,Qt::KeepAspectRatio);
    
    painter.drawPixmap(0,0,100,100,pix);
}

四、QString与String转换

//QString转换String
string s = qstr.toStdString();

//String转换QString

QString qstr2 = QString::fromStdString(s);

这样虽然能成功,但是会出现中文乱码情况。

转化与乱码处理

std::string cstr;
QString qstring;
//从std::string 到QString qstring = QString(QString::fromLocal8Bit(cstr.c_str()));
//从QString 到 std::string cstr = string((const char *)qstring.toLocal8Bit());
//不需要从gbk转到utf8 QString value_content = QString::fromStdString(vec[i].content); QString value_classname = QString::fromStdString(vec[i].classname);

 五、判断文件或者文件夹是否存在

1. 判断文件夹是不是存在
参数说明:
QString fullPath;//文件夹全路径

/*方法1*/
bool isDirExist(QString fullPath)
{
    QDir dir(fullPath);
    if(dir.exists())
    {
      return true;
    }
    return false;
}
/*方法2*/
bool isDirExist(QString fullPath)
{
    QFileInfo fileInfo(fullPath);
    if(fileInfo.isDir())
    {
      return true;
    }
    return false;
}

 

2. 判断文件是不是存在
参数说明:
QString fullFileName;//文件全路径(包含文件名)

bool isFileExist(QString fullFileName)
{
    QFileInfo fileInfo(fileFullName);
    if(fileInfo.isFile())
    {
        return true;
    }
    return false;
}

六、图像旋转

第一种方案

使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下:

QMatrix matrix;
matrix.rotate(45);

QLabel *Label= new QLabel();
Label->setPixmap(QPixmap(“:/images.png”).transformed(matrix, Qt::SmoothTransformation));

该段程序实现的效果是使图片顺时针旋转 45 度。

第二种方案

使用 QPainter 这位“画家”,示例程序如下:

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPixmap disc(":/disc.png");

    /* 碟机转动 */
    if(imageRotate++ == 360)
        imageRotate = 0;
    /* 设定旋转中心点 */
    painter.translate(130,150);
    /* 旋转的角度 */
    painter.rotate(imageRotate);
    /* 恢复中心点 */
    painter.translate(-130,-150);
    /* 画图操作 */
    painter.drawPixmap(40,60,180,180, disc);
}
posted @ 2018-11-01 10:53  爱国呐  阅读(1963)  评论(0编辑  收藏  举报