• 8891阅读
  • 10回复

请高手提供思路(在主界面中动态添加位图) [复制链接]

上一主题 下一主题
离线ferguson442
 

只看楼主 倒序阅读 楼主  发表于: 2009-04-09
我要做一个管理系统,主界面与下图类似

要求如下:
(1)当有计算机连接到服务器时,就在主界面上显示一个代表该计算机的位图,位图按行顺序排列。
(2)根据该计算机运行状态的不同,位图可以切换
(3)在位图上单击右键,会弹出菜单。
我打算把位图放在一个按钮QToolButton中,把按钮放在QWidget中。照这个思路,有两个问题不知如何解决:
(1)动态添加按钮时,用什么函数设置该按钮的位置,使其顺序排列
(2)如何去掉按钮的边框,以便看上去只是一个位图而不是按钮。
有没有更简单的实现所需功能的方法?请各位高手多多指点。
[ 此帖被ferguson442在2009-04-09 09:38重新编辑 ]
离线lugaideath

只看该作者 1楼 发表于: 2009-04-09
想做拓扑的效果?
离线ferguson442

只看该作者 2楼 发表于: 2009-04-09
没那么复杂
就是按行排列位图,一行排满了再排下一行
与下面这个界面类似:
离线318065268
只看该作者 3楼 发表于: 2009-04-09
我恰好做过类似的项目,需要根据用户的选择动态添加图形到界面。试验过很多方法,效果比较好的是这样的:
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的大小填满,可能不适合这个项目。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线318065268
只看该作者 4楼 发表于: 2009-04-09
刚看到提供的图形,那个应该更简单,试试QListWidget类或QListWidgetItem类,通过setIcon设置图标。item被单击或双击或右击时都有相应的信号发出吧。
确定了那个item被点击就根据之前规划的位置,绘图中画一个红色的圈圈,在指定位置显示菜单应该就可以了。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线ferguson442

只看该作者 5楼 发表于: 2009-04-09
谢谢楼上的热心与耐心解答!
我先试试QListWidget与QListWidgetItem,有问题再请教
离线duduqq

只看该作者 6楼 发表于: 2009-04-09
同意4楼的做法,用QListWidget会自动排列好。
离线ferguson442

只看该作者 7楼 发表于: 2009-04-09
但是见到的QListWidget的项都是竖排的,这些项可以横排吗?
而且横排时不希望出现水平滚动条
离线a6391082
只看该作者 8楼 发表于: 2012-04-07
楼主,你的问题解决了吗?我也遇到了相同的问题,
离线jebai0521
只看该作者 9楼 发表于: 2012-04-07
用网格?
离线roywillow

只看该作者 10楼 发表于: 2012-04-07
回 8楼(a6391082) 的帖子
如果只是个QWidget排列的问题的话,参考一下Qt自带的FlowLayout示例,应该就能实现了吧
另外QListWidget确实能水平排列的,就像资源管理器里的那些大图标之类的显示方式一样,不要被传统的“列表”概念束缚……具体参考他的文档吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个