Пример #1
0
//更换皮肤,之后得补充错误检测及扩充一个额外的皮肤选择窗体
void Widget::changeSkin()
{
    /*暂时只是实现将选中的图片保存到一个专门的皮肤文件夹内,
     * 将所选择的图片设置为窗体的皮肤,所以暂时能想到的操作主要有:
     * 打开文件选择对话框;将所选中的文件复制到专门的文件夹内,将该文件
     * 设置为窗体皮肤
     * 之后要补充的是:弹出一个皮肤选择对话框,能够让用户选择在skin文件夹下之前设置过的
     * 皮肤,也可以重新选择新的图片作为皮肤
     * */

    //注意:之后要完善这个换肤的功能,使得像酷狗一样能够弹出一个专门的换肤窗体。
    //先在当前路径下创建一个文件夹(目录)skin用于保存要设置的皮肤图片
    QString path = QDir::currentPath();
    QString skinPathStr = path + "/skin/";

    QDir dir(path);
    QDir skinDir(skinPathStr);
    if(!skinDir.exists())
    {
        dir.mkdir("skin");
    }
    //bool subdir = dir.mkdir(skin);



    //然后在打开文件选择对话框,选择图片文件
    //获取选择的文件的路径名
    QString skinFilePathStr = QFileDialog::getOpenFileName(this, tr("Change Skin"), "/",
                                            tr("Skin(*.jpg *.png *.jpeg *.bmp)"));
    //获取选择的图片基本信息
    QString picBaseName = QFileInfo(skinFilePathStr).baseName();
    QString picName = QFileInfo(skinFilePathStr).fileName();

    //当图片的宽度或高度小于主窗体的宽高值时,需要提示重新选择,
    //但这里暂时没有实现,之后补充!!!


    //待复制的皮肤图片的路径及文件全名
    QString newSkinName = skinPathStr + picName;

    //复制选择的图片到特定的文件夹下
    QFile::copy(skinFilePathStr, newSkinName);
    //上面复制到特定文件夹后,图片的名字应该统一一下,但这里暂时还没实现,之后得补上!!!

    //设置皮肤,暂时测试用,之后修改具体的图片
    QPixmap changedPic = QPixmap(newSkinName);

    this->setSkin(changedPic);
    this->update();

}
Пример #2
0
int SkinElementsMgr::cacheSkin(bool force) {
  if ( cached && !force ) return 0;
  if ( m_doc ) {
    //DOMNodeList * list = m_doc->getElementsByTagName("bitmap");
    //foreach(list)
    //  DOMElement * node = (DOMElement *)list->getfor();
    
    // SMARTER : load the png files directly
    ReadDir skinDir(m_skinPath);
    while (skinDir.next())  { 
      if ( skinDir.isDir() ) {
        String dir = m_skinPath + skinDir.getFilename();
        dir += DIRCHARSTR;
        ReadDir skinSubDir(dir,"*.png");
        while ( skinSubDir.next() ) {
          int dummy0;
          int dummy1;
          int dummy2;
          int dummy3;
          int dummy4;
          int dummy5;
          int dummy6;
          ARGB32 * bits = imageLoader::requestBitmap( dir + skinSubDir.getFilename() , &dummy0, &dummy1, &dummy2, &dummy3, &dummy4, &dummy5, &dummy6);
          if (bits) 
            bitmapcache.addItem(bits);
          Std::usleep(10);
        }
      }
    }
    //endfor

    cached = true;
    return 1;
  }
  return 0;
}