C++ QT:动态子按钮不可见

C++ QT:动态子按钮不可见,c++,qt,qt4,C++,Qt,Qt4,我有一个项目,我想在我的表单中的任何地方动态添加按钮 这是我的标题: namespace Ui { class frmBedBook; } class frmBedBook : public QWidget { Q_OBJECT public: explicit frmBedBook(QWidget *parent = 0); void mousePressEvent(QMouseEvent *event); ~frmBedBook(); private:

我有一个项目,我想在我的表单中的任何地方动态添加按钮

这是我的标题:

namespace Ui {
class frmBedBook;
}

class frmBedBook : public QWidget
{
    Q_OBJECT

public:
    explicit frmBedBook(QWidget *parent = 0);
    void mousePressEvent(QMouseEvent *event);
    ~frmBedBook();

private:
    Ui::frmBedBook *ui;
    QSignalMapper *signalMapper;
    QList<QPushButton*> buttonList;
    QGridLayout *lyWidget;
    QWidget *m_widget;
public slots:
    void clicked(int buttonId);
};

问题是按钮已创建,但不可见。我知道这一点,是因为我追踪了m_widget的孩子们,发现了它。我也已经在MousePressEvent函数中重置了布局,但什么也没发生。有谁能帮我解决这个问题吗?

你从不显示按钮,所以它们一直隐藏着。使用
QWidget::show()
。这适用于在显示父项后在
mousePressEvent
中创建的小部件。在构造函数中创建的按钮应在其父按钮显示时自动显示。

您从不显示按钮,因此它们保持隐藏状态。使用
QWidget::show()
。这适用于在显示父项后在
mousePressEvent
中创建的小部件。在构造函数中创建的按钮应在显示其父按钮时自动显示。

如果在窗体构造后添加按钮,则需要在按钮上调用
show()
。而且,
QCursor::pos()
可能无法提供您想要的职位

您可以使用
QMouseEvent
x()/y()
函数来代替:

void frmBedBook::mousePressEvent(QMouseEvent *event)
{
    QPushButton *p;

    p = new QPushButton(m_widget);
    p->setText("02");
    p->setGeometry(event->x(), event->y(), 50, 50);
    p->show();
    buttonList.append(p);
    connect(p, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(p,2);
}

请注意,您需要
#包括
,除非您已经有了它。

如果在构建表单后添加了按钮,则需要在按钮上调用
show()
。而且,
QCursor::pos()
可能无法提供您想要的职位

您可以使用
QMouseEvent
x()/y()
函数来代替:

void frmBedBook::mousePressEvent(QMouseEvent *event)
{
    QPushButton *p;

    p = new QPushButton(m_widget);
    p->setText("02");
    p->setGeometry(event->x(), event->y(), 50, 50);
    p->show();
    buttonList.append(p);
    connect(p, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(p,2);
}

请注意,除非您已经有了该功能,否则您需要
#包括

它非常有效,非常感谢您的帮助。它非常有效,非常感谢您的帮助。