0

さて、ボタンがクリックされるたびにこのプログラムが変数xとyをランダムに変更するようにする方法はありますか?プログラミングは初めてです...

#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QtGUI>
#include <QWidget>
#include <cstdlib>
#include <ctime>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    QWidget *window = new QWidget;

    srand(time(0));
    int x = 1+(rand()%900);
    int y = 1+(rand()%400);

    QPushButton *MainInter = new QPushButton("Push me!",window);

    QPropertyAnimation *animation = new QPropertyAnimation(MainInter, "pos");
    animation->setDuration(0);
    animation->setEndValue(QPoint(x,y));

    Object::connect(MainInter,SIGNAL(released()),animation,SLOT(start()));


    window->resize(900,500);
    window->show();

    return a.exec();
}  
4

1 に答える 1

2

released()ボタンの信号をアニメーションのスロットに直接接続する代わりにstart()、独自のカスタムスロットを作成することができます。次に、ボタンをボタンに接続し、アクションを処理して、アニメーションを呼び出します。

まず、でトップレベルのオブジェクトを作成するのではなく、カスタムQWidgetを作成する方法を確認しますmain()ここでの簡単な例

カスタムウィジェットは次のようになります。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QPushButton;
class QPropertyAnimation;

class MyWidget : public QWidget
{
    Q_OBJECT
public:
   MyWidget(QWidget *parent = 0);

private:
    QPushButton *button;
    QPropertyAnimation *animation;

public slots:
    void randomizeAnim();
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QPushButton>
#include <QPropertyAnimation>
#include <ctime>

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
{
    button = new QPushButton("Push me!", this);
    animation = new QPropertyAnimation(button, "pos");
    animation->setDuration(0);

    QObject::connect(button, SIGNAL(released()), this, SLOT(randomizeAnim()));
}

void MyWidget::randomizeAnim()
{
    srand(time(0));
    int x = 1+(rand()%900);
    int y = 1+(rand()%400);

    animation->setEndValue(QPoint(x,y));
    animation->start();

}

そして今、あなたmain.cppは定型コードに還元することができます:

#include <QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *window = new MyWidget;
    window->resize(900,500);
    window->show();

    return a.exec();
}

クリックするたびに、カスタムスロットがアクションを処理し、アニメーションを実行します。

于 2012-08-27T20:46:09.393 に答える