打印

我的一些QT代码,放上来算是备注吧

[复制链接]
1127|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
13395410441|  楼主 | 2016-1-26 18:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <QKeyEvent>
#include <QDir>
#include <QFileDialog>
#include <QFile>
#include <QDebug>
#include <QString>
#include <QKeyEvent>

#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QVBoxLayout>
1、修改桌面背景
#include <QProcess>
    QProcess *proc = new QProcess;   
    proc->start("gsettings set org.gnome.desktop.background picture-uri 'file:///home/wz/1.jpg'");
   
   
  
   2、分享
   QT += webkitwidgets
   
   
   3、读取文件夹,加载到链表中
void MainWindow::openFile()
{
     int  imgNum;
    QFileInfoList allimgs;//文件对象链表   
    QStringList allThumbs;//文件名称链表
    QString  currentdir;//获取这个文件的路径
    QString opendir = QDir::homePath();//指定默认打开的路径
    QString currentfile = QFileDialog::getOpenFileName(this,"Open file",opendir,"Images (*.bmp *.gif *.tif *.jpg *.jpeg *.jpeg2000 *.png *.pbm *.pgm *.ppm *.xbm *.xpm *.tiff)");//从默认打开的路径开始查找选择文件
    qDebug()<<"openfile"<<currentfile;//选中的文件
    if(QFileInfo(currentfile).isFile())//判断是不是文件
    currentdir = QFileInfo(currentfile).absoluteDir().absolutePath();//获取最终选中的文件的路径
    qDebug() << "获取这个文件的路径:" << currentdir;//获取这个文件的路径
    QDir *dir = new QDir(currentdir);//把获取的路径赋值给文件夹变量进行数据操作

    //过滤器
    QStringList flt;
    flt << "*.bmp" << "*.gif" << "*.tif" << "*.jpg" << "*.jpeg" << "*.jpeg2000" << "*.png" << "*.pbm" << "*.pgm" << "*.ppm" << "*.xbm" << "*.xpm" << "*.tiff";
    dir->setNameFilters(flt);

    allimgs = dir->entryInfoList(QDir::NoFilter,QDir::IgnoreCase);//返回文件和目录的对象
    allThumbs = dir->entryList();//返回一个列表的目录中的所有文件和目录的名称
    imgNum = allimgs.length();//但前链表的长度
    qDebug() << "文件个数:" << imgNum;//获取这个文件的路径
    for(int i = 0; i < imgNum; ++i) {
       qDebug()<<"filename == "<<allThumbs.at(i);
     // qDebug()<<"filename == "<< allimgs.at(i).fileName();//当前文件
    //allimgs.indexOf(currentfile);//当前文件的序号
   }
   
   4、键盘快捷键打开文件夹
   void MainWindow::keyPressEvent(QKeyEvent *keyEvent)
{
    int keyValue = keyEvent->key();
    switch (keyValue) {
    case Qt::Key_Q:
        qDebug()<<"Q = "<<keyValue;
        break;
    case Qt::Key_O:
        qDebug()<<"O = "<<keyValue;
        openFile();
        break;
    default:
        break;
    }
}
   5、创建view  scene   item
   
   view可以封装一个类继承QGraphicsview,以便添加自己的函数和信号
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
   
   
   
   
    QWidget *central = new QWidget;//中间部件用来添加到窗体
    QVBoxLayout *vboxLayout = new QVBoxLayout;//布局添加到中央部件
    QGraphicsView *view = new QGraphicsView;//view添加到布局
    view->setGeometry(0,600-100,800,100);//view在窗口的位置
    view->setFixedHeight(100);//固定高度
    view->setAlignment(Qt::AlignCenter);//左对齐,可以多个选项 |
   // connect(thumb,SIGNAL(clicked(QPoint)),this,SLOT(loadNewImg(QPoint)));//点击缩略图的时候加载大图片
    view->setScene(&scene);
    view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);        //隐藏滚动条
    view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    this->setCentralWidget(central);
    central->setLayout(vboxLayout);
    vboxLayout->addWidget(view);
    view->show();
    central->show();

  }
  
  6、创建scene  item
  在线程中用qimage不用qpixmap,安全问题。
  QGraphicsScene scene;
  QGraphicsPixmapItem * pixItem = new QGraphicsPixmapItem(file,text,size);//文件名,名称,大小
  pixItem->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
  view->setScene(&scene);
for(int i = 0;i<imgNum;i++)
    {
        QGraphicsPixmapItem *item1 = new QGraphicsPixmapItem;

        QImage pix_img(allimgs.at(i).absoluteFilePath());
        pix_img = pix_img.scaledToWidth(200,Qt::SmoothTransformation);
        pix_img = pix_img.scaledToWidth(100,Qt::FastTransformation);
        if(pix_img.height()>100){
            if(pix_img.height()>200)
               pix_img =  pix_img.scaledToHeight(200,Qt::FastTransformation);
          pix_img =  pix_img.scaledToHeight(100,Qt::SmoothTransformation);
        }
        item1->setPixmap(QPixmap::fromImage(pix_img));
        //通过图片序号计算应该放置的坐标
        int x = (i*100+20);
        if(pix_img.width() < 100)
            x += (100-pix_img.width())/2.0;
        int y= 0;
        if(pix_img.height() < 100)
            y += (100-pix_img.height())/2.0;
        //给项目设置坐标
        item1->setPos(x,y);
        //添加缩略图到缩略图场景
        scene.addItem(item1);
        }
  
    QPointF pos;//用来决定位置
    pos = QPointF(MY_NODEUI_STA+MY_NODEUI_DIS*4,MY_NODEUI_POS_Y);

相关帖子

沙发
dirtwillfly| | 2016-1-26 19:27 | 只看该作者
这是实现什么功能的程序?

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
13395410441 + 2 神马都是浮云
板凳
13395410441|  楼主 | 2016-1-27 09:39 | 只看该作者
dirtwillfly 发表于 2016-1-26 19:27
这是实现什么功能的程序?

做图片查看器用到的一些零星的代码,备注下,主要是记一下有这么个功能的代码,不是具体实现什么功能的。

使用特权

评论回复
地板
dirtwillfly| | 2016-1-27 11:25 | 只看该作者
13395410441 发表于 2016-1-27 09:39
做图片查看器用到的一些零星的代码,备注下,主要是记一下有这么个功能的代码,不是具体实现什么功能的。 ...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

56

帖子

3

粉丝