2016-10-05 79 views
-1

当我尝试将QLabel放入QWidget类中时,它无法正常工作(没有悬停事件或单击事件,只显示标签pixmap)只有最后一个实例正常工作,而不使用set parent ,它在新窗口创建的每个标签,但是它的正确继承QLabel并在QWidget类中使用

工作这个GIF显示问题:

https://media.giphy.com/media/3o7TKKmZSISGXN4Opq/giphy.gif

这是QLabel子标题:

#include <QObject> 
#include <QLabel> 
class myLabel : public QLabel 
{ 
    Q_OBJECT 
public: 
    myLabel(); 

protected: 
    void mousePressEvent(QMouseEvent *); 
    void enterEvent(QEvent *); 
    void leaveEvent(QEvent *); 


signals : 
    void labelClicked(); 
    void enterSignal(); 
    void leaveEventSignal(); 

private: 

}; 

该类做出的LabelButton:

#include <QObject> 
#include <QWidget> 
#include "mylabel.h" 
class labelButton : public QWidget 
{ 
    Q_OBJECT 
public: 
    labelButton(); 

    //some functions 

private slots: 
    //slots 

private: 
    //private member 
}; 

,这是我想要使用的labelButtons在类:

#include <QWidget> 
#include "labelbutton.h" 

namespace Ui { 
class Widget; 
} 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit Widget(QWidget *parent = 0); 
    ~Widget(); 

private: 
    Ui::Widget *ui; 

    labelButton *b_1, *b_2, *b_3; 

}; 

这里是widget.cpp:

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 

    b_1 = new labelButton; 
    b_1->setParent(this); 
    b_1->moveButton(70, 100); 
    //some functions to initialize the labelButton 
    b_1->show(); 

    //----------------------- 

    b_2 = new labelButton; 
    b_2->setParent(this); 
    b_2->moveButton(70, 200); 
    //some functions to initialize the labelButton 
    b_2->show(); 

    //----------------------- 

    b_3 = new labelButton; 
    b_3->setParent(this); 
    b_3->moveButton(70, 300); 
    //some functions to initialize the labelButton 
    b_3->show(); 
} 
+0

对不起,什么也正是非工作? – peppe

+0

在widget.cpp创建labelButton实例时,我做了3个labelButton,前两个只显示没有悬停或点击的标签图像(当它悬停或点击时应该更改标签的像素图)最后一个正确工作 –

+2

请减少源代码转换为一个小型,完整,可编译的例子。您不包含标签的来源。 – peppe

回答

0

这里它的工作,问题是通过父母 我做了一个功能,从功能值

b_1 = new labelButton; 
//b_1->setParent(this); 
b_1->setParentFunc(this); 
b_1->moveButton(70, 100); 
//some functions to initialize the labelButton 
// b_1->show(); 

中的LabelButton:

void labelButton::setParentFunc(QWidget *p) 
{ 
    myParent = p; 
} 

mLabel_1->setParent(myParent); // myParent instead of this 
+0

通过向构造函数提供父指针来执行常规方法会出现什么问题? – hyde