继承QLabel后重载鼠标事件后图片显示不正常? 400 报错
下图是未继承时显示的
下面是继承后添加鼠标单击动作后显示的,
继承的后只添加了事件处理和处理函数,及相关信号动。构造函数是这样的:
ImageLabel(QLabel *parent);
初始化是使用在相关的QWidget上定义好的label作为夫对象:
imagelabel = new imageLabel(label);
鼠标单击动作实现了,但是就是显示图片出错。。。。
这是怎么回事?
继承的类的代码:
class AvatarLabel : public QLabel { Q_OBJECT public: AvatarLabel(QLabel *); void mouseReleaseEvent(QMouseEvent *); signals: void sigleClicked(); private slots: void showUserInfo(); };
在另一个自定义的类menberItem中声明有这个类的对象指针imageLabel,然后在menberItem构造时初始化imageLabel(avatar),父对象avatar在ui_menberItem.h中声明并初始化。代码好多就不贴玩了,值贴ui_menberItem.h中声明的avatar
avatar = new QLabel(menberItem); avatar->setObjectName(QString::fromUtf8("avatar")); avatar->setGeometry(QRect(0, 3, 47, 47)); avatar->setMinimumSize(QSize(30, 30)); avatar->setMaximumSize(QSize(60, 60)); avatar->setStyleSheet(QString::fromUtf8("")); avatar->setScaledContents(true);
在test.cpp中使用了类menberItem,并使用menberItem类定义的函数设置图片,设置图片的代码:
QPixmap pix(path); avatar_lb->setPixmap(pix); avatar_lb->setToolTip( u_username );
在test.cpp中使用相对路径设置图像:"./icon/headport.png"。如果不是用重载的AvatarLabel的话显示如上第一张图,是没有问题的。使用AvatarLabel后就不行了。如第二张图。
路径的问题?######回复 @锋了 : 解决了,方法是在继承的类的构造方法中加入下面两行: this->setScaledContents(true); this->resize(parent->size());######添加了更详细的问题描述,你看看是哪里出的问题,谢谢######
...这个……没有代码看着可能性太多了:
首先:imagelabel的大小改变了么?因为只是指定parent是不会影响大小的。父对象的大小有没有问题?contentsMargin有没有设置成0?是不是设置了Layout?Layout的contentsMargin有没有问题?其次,scaledContents属性是否进行过设置?第三:鼠标单击后执行的事件是什么?有没有可能造成背景的改变?
凭空猜测可能性很多。建议最好把代码放上来。
######解决了,方法是在继承的类的构造方法中加入下面两行: this->setScaledContents(true); this->resize(parent->size());######已更新问题描述,看看是哪里的问题,谢谢###### 首先啊……这个…… void mouseReleaseEvent(QMouseEvent *);应该是protected而不是public……额,你这个使用了UI文件么……这个我就不是很清楚了……
从没用过UI文件,界面只是自己硬编码过……帮你顶一下吧……
######因为还不太熟悉QT,所以部分的界面就直接用creator生成了,后面操作的才自己写######我感觉你这个很明显就是因为背景图片没有缩放导致的。
建议手动缩放一下:
在你继承的类的构造方法里加上下面几句话:
QPixmap map; map.load(“image.png”); QPalette palette; palette.setBrush(QPalette::Background,QBrush(map.scaled(this->width(),this->height()))); this->setAutoFillBackground(true); this->setPalette(palette); //set backimage
QPixmap pix(avatar); /* 头像 */ QPixmap map; map.load("./icon/head.png"); QPalette palette; palette.setBrush(QPalette::Background, QBrush(map.scaled(lb_avatar->width(), lb_avatar->height()))); lb_avatar->setAutoFillBackground(true); lb_avatar->setPalette(palette); lb_avatar->setPixmap(pix); lb_avatar->setToolTip( u_username );
这样是设置背景吗,还是没有显示成功哦
我写了个资源文件,但是在右键菜单的QAction中使用设置图标无发显示,在pro文件中也加了RESOURCE = xxx.qrc
<RCC> <qresource> <file>icon/err.png</file> <file>icon/msg.png</file> <file>icon/headport.png</file> <file>icon/head.png</file> </qresource> </RCC>
引用方法是setIcon(QIcon(":/icon/err.png"));
######按照@quanwei9958的方法设置后效果变成这样了,好像还是label的问题。还有我设置的图片路径没有显示背景图片的。
map.load("./icon/head.png");
######回复 @quanwei9958 : 但是这个问题没有解决,楼下有描述。问题:我写了个资源文件,但是在右键菜单的QAction中使用设置图标无发显示,在pro文件中也加了RESOURCE = xxx.qrc######回复 @quanwei9958 : 解决了,的确是设置的图片不能自动设置缩放,但这应该不是背景图片吧。方法是在继承的类的构造函数中加入下面两行: this->setScaledContents(true); this->resize(parent->size());######回复 @quanwei9958 : 还是这样,会不会是我memberItem类继承的问题。 class memberItem : public QWidget,public QTreeWidgetItem, private Ui::memberItem { };######回复 @quanwei9958 : 错了,不是rescale而是scaled()######map.load下面再加一句 map=map.rescale(width,height); 分别为你Label的width,height######
还是我测试的代码出问题呢?
/*组2*/ QTreeWidgetItem *group_2 = new QTreeWidgetItem(&treeWidget, QStringList("Root"), 0); group_2->setIcon(0, QIcon("./icon/close.png")); group_2->setText(0, QObject::tr("root")); group_2->setSizeHint(0, QSize(100, 20)); ContactsItem *citem = new ContactsItem(group_2); citem->setName(QObject::tr("Fengzi")); citem->setAvatar("./icon/headport.png"); citem->setStatusIcon("./icon/online_status.png", "online"); citem->setSignature("今天心情不错!"); QTreeWidgetItem *Contact_3 = new QTreeWidgetItem(group_2); Contact_3->setSizeHint(0, QSize(100, 50)); treeWidget.setItemWidget(Contact_3, 0, citem);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。