可以在OSx中进行QDialog抖动

时间:2012-05-20 21:22:49

标签: c++ macos qt

由于Qt在OSX下使用Cocoa,如果用户输入错误的密码,是否可以使模态QDialog抖动?我无法找到任何关于它的东西,但在mac上实现真的很棒。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道有这样做的内置方式,但你可以自己实现摇动,如下:

header.h

#include <QtGui>

class ShakyDialog : public QDialog
{
    Q_OBJECT

public slots:
    void shake()
    {
        static int numTimesCalled = 0;
        numTimesCalled++;

        if (numTimesCalled == 9) {
            numTimesCalled = 0;
            return;
        }

        vacillate();
        QTimer::singleShot(40, this, SLOT(shake()));
    }

private:
    void vacillate()
    {
        QPoint offset(10, 0);

        move(((shakeSwitch) ? pos() + offset : pos() - offset));
        shakeSwitch = !shakeSwitch;
    }

    bool shakeSwitch;
};

的main.cpp

#include "header.h"

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

    ShakyDialog dialog;
    QHBoxLayout layout(&dialog);
    QPushButton button("Push me.");
    layout.addWidget(&button);

    QObject::connect(&button, SIGNAL(clicked()), &dialog, SLOT(shake()));

    dialog.show();
    return app.exec();
}