我恰好做过类似的项目,需要根据用户的选择动态添加图形到界面。试验过很多方法,效果比较好的是这样的:
1,为画该图专门建立一个类。这是部分代码:
void PPshow :: resizeEvent(QResizeEvent *)
{
win_width = (size()).width();
win_height = (size()).height();
}
void PPshow :: paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap *PP = new QPixmap(PPpath);
painter.drawPixmap(0,0,win_width,win_height,*PP);
}
这样可以保证图能填满它所属的物件,方便以后查看缩略图或者是大图;
2,如果需要有图、按钮、标签等等混合的缩略的物件,可以再新建一个类,这个类中创建之前那个只画图类的对象,然后和这些按钮、标签的对象一起进行Layout,布局好,待用;
3,在更高的父类中手工排布。实验证明Layout排布在你所要添加的位图数量少的时候可能会自动放大你的图或者扩大间距,并不是想要的效果。手工排布无非是在循环里使用setGeometry(x,y,width,height);来控制位置。想按指定的顺序排布可以之间将这个顺序做成一个QStringList,然后顺序读取它,同时设置位置;
4,位图的切换可以用上面说的那个最小的画图的类中图片路径的参数来控制,显示不同的图形就是不同的状态;
5,位图单击右键出现菜单可以在相关的右键事件中,根据之前手工排布的位图的位置关系来确定点击的是哪个物件,做后续处理,同时在该点击位置绘制菜单并show即可。
6,用QPushButton来画图不是正统的做法,有在QLabel中画的。但是不好让图自适应的根据Label的大小填满,可能不适合这个项目。