0

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

谢谢!

4

1 回答 1

1

我不知道这样做的内置方法,但您可以自己实现摇动,如下所示:

头文件.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;
};

主文件

#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();
}
于 2012-05-21T05:27:44.670 回答