我想设置一个计时器,每30ms在窗口小部件的随机位置创建一个QPushButton
。我有以下代码,但它不起作用(窗口标题更改,而没有QPushButton
出现):
.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class Tbutton : public QWidget
{
Q_OBJECT
public:
Tbutton(QWidget * parent=0);
protected:
void timerEvent(QTimerEvent *event);
};
#endif // MAINWINDOW_H
.cpp文件:
#include <QTimer>
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
Tbutton::Tbutton(QWidget *parent) :QWidget(parent)
{
startTimer(30);
}
void Tbutton::timerEvent(QTimerEvent *e)
{
Q_UNUSED(e);
QPushButton * b1=new QPushButton("re",this);
b1->setGeometry(rand(),rand(),20,20);
QString abs="abs"+QString::number(rand());
setWindowTitle(abs);
}
答案 0 :(得分:1)
rand()
返回0
和RAND_MAX
之间的整数,这通常是一个很大的值(在VC ++ CRT上它是32767,在glibc上它是2147483647);因此,几乎在每种情况下,您都会在窗口的右下方产生很远的按钮,根本不可见。
您可以通过将随机范围限制为包含窗口的大小来解决此问题:
QPushButton * b1=new QPushButton("re",this);
b1->setGeometry(
rand() % std::max((this->width()-20), 1),
rand() % std::max((this->height()-20), 1),
20,20);
答案 1 :(得分:0)
答案是在b1->show()
中添加timerEvent
。