2016-10-05 2 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, первые два только показывают изображение метки без зависания или щелчка (он должен изменить pixmap метки при наведении или щелчке), последний работает правильно –

+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

Смежные вопросы