2013-09-28 39 views
1

另一个QLabel鼠标按下好所以我想要做的是创建一个新的QLabel添加到QList,并把它放在我点击其他QLabel我点击的地方。创建并指定一个QLabel后QT

因此,这里是我的代码:

class CustomLabel : public QLabel 
    { 
     Q_OBJECT 
    public: 
     CustomLabel(); 
     void mousePressEvent(QMouseEvent* event); 

    private: 
     QList<QLabel *> pointsL; 
     QList<QPoint *> points; 
    }; 


    void CustomLabel::mousePressEvent(QMouseEvent *event) 
    { 
     points << new QPoint(event->pos()); 
     pointsL << new QLabel(this); 
     pointsL.at(pointsL.size()-1)->setText("+"); 
     pointsL.at(pointsL.size()-1)->setGeometry(QRect(points.at(points.size()-1)->rx(),, points.at(points.size()-1)->ry(), 1, 1)); 
    } 

我也试过:

pointsL.at(pointsL.size()-1)->move(points.at(points.size()-1)->rx(), points.at(points.size()-1)->ry()); 

这:

void CustomLabel::mousePressEvent(QMouseEvent *event) 
    { 
     points << new QPoint(event->pos()); 
     pointsL << new QLabel(this); 
     pointsL.at(pointsL.size()-1)->setText("+"); 
     pointsL.at(pointsL.size()-1)->move(*points.at(points.size()-1)); 
     pointsL.at(pointsL.size()-1)->setTabOrder(pointsL.at(pointsL.size()-1), this); 
    } 

当我点击自定义标签没有任何反应。构造函数是空的。

感谢您的任何答案。

+0

不要以为QLabel可以作为容器构件,即它不能有另一个QLabel像一个孩子,并显示它。这可能是新标签没有出现的原因。我不确定我完全理解你的情况。你是否尝试过一个QGridLayout?鼠标事件需要由父QWidget处理。 – user2672165

+0

我发现了该问题的替代方案,不过谢谢! – user2826636

回答

0

父窗口在屏幕上可见之后添加的新窗口小部件应该显式显示,除非它们在布局中。

所以基本上你应该加上:

pointsL.back()−>show();