系列文章目录
第一章 多文件结构
- 头文件&cpp文件
- 添加资源
第二章 核心功能
第三章 UI相关
- 菜单栏
- 按钮等
总结
移动的实现
0.思路
首先,我们需要在画图的若干功能中添加移动功能,然后我们需要在ui界面里获取位移的信息,这之后需要选中要移动的区域,最后将移动后的图像呈现在画板上。
1.添加功能
在paintarea.h文件中的画笔枚举变量里添加Move:
class PaintArea : public QWidget
{
Q_OBJECT
public:
enum ShapeType //枚举变量,几个图形的选择
{
None,
Line,
Rectangle,
Text,
Ellipse,
Circle,
FILL,
Move
};
2.设置ui界面
然后我们打开ui界面,选择一个位置添加两个QLineEdit,并将它的名称改为moveX,moveY。再添加了四个QRadioButton,用于指使位移的方向。
3.获取位移信息
首先我们在mainwindow.h文件里添加响应函数:
class MainWindow : public QMainWindow
{
Q_OBJECT
private slots:
void on_moveX_textChanged();
void on_moveY_textChanged();
void on_moveLeft_clicked();
void on_moveOn_clicked();
void on_moveDown_clicked();
void on_moveRight_clicked();
然后我们在mainwindow.cpp文件中写出这个函数:
extern QString moveX,moveY;
void MainWindow::on_moveX_textChanged()
{
moveX=ui->moveX->text();
}
void MainWindow::on_moveY_textChanged()
{
moveY=ui->moveY->text();
}
extern bool zuo,shang;
void MainWindow::on_moveLeft_clicked()
{
zuo = 1;
shang = 1;
}
void MainWindow::on_moveOn_clicked()
{
zuo = 0;
shang = 1;
}
void MainWindow::on_moveDown_clicked()
{
zuo = 1;
shang = 0;
}
void MainWindow::on_moveRight_clicked()
{
zuo = 0;
shang = 0;
}
这里我又偷了个懒,设了个全局变量,而没有使用指针,正规的操作是使用指针的。
而设置全局变量后只需先在main.cpp中添加变量声明,然后在使用前引用即可。
4.实现功能
在paintarea.cpp文件里对应添加画文本功能:
void PaintArea::paint(QImage&theImage)
{
case Move: //移动
{
//获取这片区域的图像
QColor moveImage[w][h];
for (int iii = x; iii < x+w;iii++)
{
for (int jjj = y; jjj < y+h; jjj++)
{
moveImage[iii-x][jjj-y] = image.pixelColor(iii,jjj);
//_sleep(1);
}
}
//把这个地方变成空白再重绘
for (int iii = x; iii < x+w;iii++)
{
for (int jjj = y; jjj < y+h; jjj++)
{
if(iii<700&& iii>0&&jjj>0&& jjj<500)
{
image.setPixelColor(iii,jjj,QColor(Qt::white));
}
}
}
//键盘操作临时图层移动
int moveXX=0;
for (int i = 0; i < moveX.length(); i++)
{
moveXX=10*moveXX+(moveX[i].digitValue());
}
int moveYY=0;
for (int i = 0; i < moveY.length(); i++)
{
moveYY=10*moveYY+(moveY[i].digitValue());
}
if(zuo)
{
moveXX = 0 - moveXX;
}
if(shang)
{
moveYY = 0 - moveYY;
}
for (int iii = x+moveXX; iii < x+w+moveXX;iii++)
{
for (int jjj = y+moveYY; jjj < y+h+moveYY; jjj++)
{
if((iii<700&& iii>0&&jjj>0&& jjj<500))
{
image.setPixelColor(iii,jjj,moveImage[iii-x-moveXX][jjj-y-moveYY]);
}
}
}
break;
}
}
5.小结
这个功能…只能说实现的很诡异…或者说丑陋。
但是他是可行的。