【问题标题】:Create and specify a QLabel after mouse pressed on another QLabel in QT在 QT 中的另一个 QLabel 上按下鼠标后创建并指定一个 QLabel
【发布时间】:2013-09-28 16:12:16
【问题描述】:

好的,所以我要做的是创建一个添加到 QList 的新 QLabel,并将其放在我单击的另一个 QLabel 上。

这是我的代码:

    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);
    }

当我单击自定义标签时,没有任何反应。构造函数为空。

感谢您的任何回答。

【问题讨论】:

  • 不要认为 QLabel 可以用作容器小部件,即它不能有另一个 QLabel 作为这样的孩子并显示它。这可能是新标签没有出现的原因。我不确定我是否完全理解你的情况。你试过吗? QGridLayout?鼠标事件需要由父 QWidget 处理。
  • 我找到了解决问题的方法,但还是谢谢!

标签: qt events mouse qlabel


【解决方案1】:

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

所以基本上你应该添加:

pointsL.back()−>show();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多