Спрайты и ToolButton



  • Здравствуйте хочу сделать так чтобы на кнопке toolbutton, автоматически менялись кадры иконки.
    Вот есть спрайт !http://s011.radikal.ru/i318/1410/c9/251f7b9f7804.png(http://s011.radikal.ru/i318/1410/c9/251f7b9f7804.png)!
    хочу чтобы кнопка toolbutton эти иконки отображались там по очереди. не знаю как правильно сделать сейчас есть примерно такой код, он работает, но на сколько грамотно это оформлено не знаю. Куски кода
    @
    //Вот тут получаю иконку из спрайта
    QIcon GetIcon(int left, int top, int width, int height) // or calculate these from an icon index or such
    {
    QImage sprite, result;
    sprite = QImage(":/chat/icons/users/Icons/chat.png");
    result = QImage(QSize(16, 16), QImage::Format_ARGB32);
    QPainter painter(&result);
    painter.drawImage(0, 0, sprite, left, top, width, height);

     painter.end();
    
     return QIcon(QPixmap::fromImage(result));
    

    }

    //Тут код перемещаюшися по спрайту влево.
    void MainWindow::on_toolButton_2_clicked()
    {
    static int i = 0;
    static int k = 0;

    ui->toolButton_2->setIcon(GetIcon(i, 0, 0, 0));
    
    i += 16;
    k++;
    if(k == 20)
    {
        k = 0;
        i = 0;
    }
    

    }
    @
    Это пример спрайта из PSI+, если кто знает там когда пользователь онлайн происходит соб-но анимация спрайта, вот хочу сделать что-то типо этого. Жду Ответов!

    [andreyc EDIT] добавил @ для кодочитабельности



  • Я думаю что лучше использовать QMovie с gif файлом
    Вот так например
    @
    void MainWindow::on_toolButton_clicked()
    {
    movie->setFileName(":/chat.gif");
    ui->toolButton->setIcon(movie->currentPixmap());
    connect(movie, &QMovie::frameChanged, this, &MainWindow::onFrameChanged);
    connect(this, &MainWindow::connected, movie, &QMovie::stop);
    movie->start();
    }

    void MainWindow::on_toolButton_2_clicked()
    {
    emit connected();
    }
    @



  • ок спс подождем может кто еще решение предложит


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.