我在一个处理简单窗口的类中(我从Qt开始),但是当我尝试向该窗口添加新的Widget(从自定义类的插槽)时,它没有出现在窗户上。我使用QTextStream表示正确调用了插槽,并且所生成的随机坐标是正确的,所以我完全不理解为什么窗口上没有新内容。此外,在ButtonsWindow::ButtonsWindow(QWidget *parent) : QWidget(parent) {}
中首次将广告位作为函数调用时,小部件会正确显示...您有任何想法吗?
这是我的.h代码:
#ifndef BUTTONSWINDOW_H
#define BUTTONSWINDOW_H
#include <QPushButton>
#include <QGridLayout>
#include <QLabel>
#include <cstdlib>
#include <ctime>
#include <QDebug>
#include <QVector>
class ButtonsWindow : public QWidget
{
Q_OBJECT
public:
explicit ButtonsWindow(QWidget *parent = nullptr);
private:
QPushButton *testButton;
QVector<QWidget*> buttonsArray;
signals:
public slots:
void createNewButton();
};
#endif // BUTTONSWINDOW_H
这是我的.cpp类代码:
#include "buttonswindow.h"
ButtonsWindow::ButtonsWindow(QWidget *parent) : QWidget(parent)
{
setFixedSize(1000, 300);
createNewButton();
}
void ButtonsWindow::createNewButton()
{
QWidget *mainWidget = new QWidget(this);
QPalette pal = palette();
pal.setColor(QPalette::Background, Qt::lightGray);
mainWidget->setAutoFillBackground(true);
mainWidget->setPalette(pal);
QGridLayout *layout = new QGridLayout;
QLabel *text = new QLabel("What to do?");
text->setCursor(Qt::WhatsThisCursor);
QPushButton *addWidget = new QPushButton("Create a new Button");
QObject::connect(addWidget, SIGNAL(pressed()), this, SLOT(createNewButton()));
addWidget->setCursor(Qt::CrossCursor);
QPushButton *removeWidget = new QPushButton("Remove an existing random Button");
removeWidget->setCursor(Qt::ForbiddenCursor);
layout->addWidget(text, 0, 0, 1, 2, Qt::AlignCenter);
layout->addWidget(addWidget, 1, 0, 1, 1, Qt::AlignCenter);
layout->addWidget(removeWidget, 1, 1, 1, 1, Qt::AlignCenter);
mainWidget->setLayout(layout);
int nX = (rand() % this->width() - 2 * mainWidget->width());
nX += mainWidget->width();
int nY = (rand() % this->height() - 2 * mainWidget->height());
nY += mainWidget->height();
mainWidget->move(nX, nY);
QTextStream(stdout) << "check " << nX << " : : " << nY;
buttonsArray.append(mainWidget);
}
最后,这是我的main.cpp代码:
#include <QApplication>
#include <QPushButton>
#include "buttonswindow.h"
#include <QGridLayout>
using namespace std;
int main(int argc, char *argv[]) {
srand(time(0));
QApplication app(argc, argv);
ButtonsWindow window;
window.show();
return app.exec();
}
答案 0 :(得分:1)
从documentation ...
如果将子窗口小部件添加到已经可见的窗口小部件,则必须 明确显示孩子以使其可见。
所以您只需要添加
mainWidget->show();
在ButtonsWindow::createNewButton
实施结束时。