#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); |