最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt中QAbstractButton::setAutoRepeat設(shè)置按住按鈕自動(dòng)重復(fù)

 更新時(shí)間:2026年06月04日 09:49:00   作者:晴雨日記  
QAbstractButton::setAutoRepeat接口用于設(shè)置按鈕自動(dòng)重復(fù)功能,本文就來(lái)介紹一下Qt中QAbstractButton::setAutoRepeat設(shè)置按住按鈕自動(dòng)重復(fù),感興趣的可以了解一下

QAbstractButton::setAutoRepeat 是 Qt 中用于設(shè)置按鈕自動(dòng)重復(fù)功能的接口。當(dāng)啟用自動(dòng)重復(fù)后,用戶(hù)按住按鈕時(shí),按鈕會(huì)周期性地觸發(fā) clicked() 等信號(hào)。

基本用法

#include <QApplication>
#include <QPushButton>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QPushButton button("按住我自動(dòng)重復(fù)");
    button.setAutoRepeat(true); // 啟用自動(dòng)重復(fù)
    button.setAutoRepeatDelay(500); // 首次重復(fù)前的延遲(毫秒)
    button.setAutoRepeatInterval(100); // 重復(fù)間隔(毫秒)
    
    QObject::connect(&button, &QPushButton::clicked, []() {
        qDebug() << "按鈕被點(diǎn)擊 at" << QTime::currentTime().toString("hh:mm:ss.zzz");
    });
    
    button.show();
    return app.exec();
}

詳細(xì)參數(shù)說(shuō)明

1. 核心方法

// 啟用/禁用自動(dòng)重復(fù)
void setAutoRepeat(bool enable);

// 設(shè)置首次重復(fù)前的延遲(默認(rèn)300ms)
void setAutoRepeatDelay(int delay);

// 設(shè)置重復(fù)間隔(默認(rèn)100ms)
void setAutoRepeatInterval(int interval);

// 獲取當(dāng)前設(shè)置
bool autoRepeat() const;
int autoRepeatDelay() const;
int autoRepeatInterval() const;

2. 完整示例

class CounterWidget : public QWidget
{
    Q_OBJECT
private:
    QPushButton *incButton;
    QPushButton *decButton;
    QLabel *countLabel;
    int count = 0;

public:
    CounterWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        QVBoxLayout *layout = new QVBoxLayout(this);
        
        countLabel = new QLabel("0", this);
        countLabel->setAlignment(Qt::AlignCenter);
        countLabel->setStyleSheet("font-size: 24px;");
        
        incButton = new QPushButton("+", this);
        decButton = new QPushButton("-", this);
        
        // 設(shè)置自動(dòng)重復(fù)
        setupAutoRepeat(incButton);
        setupAutoRepeat(decButton);
        
        layout->addWidget(countLabel);
        layout->addWidget(incButton);
        layout->addWidget(decButton);
        
        connect(incButton, &QPushButton::clicked, this, &CounterWidget::increment);
        connect(decButton, &QPushButton::clicked, this, &CounterWidget::decrement);
    }

private:
    void setupAutoRepeat(QPushButton *button)
    {
        button->setAutoRepeat(true);
        button->setAutoRepeatDelay(400); // 按住400ms后開(kāi)始重復(fù)
        button->setAutoRepeatInterval(50); // 每50ms重復(fù)一次
    }
    
private slots:
    void increment()
    {
        count++;
        countLabel->setText(QString::number(count));
        qDebug() << "增加至:" << count;
    }
    
    void decrement()
    {
        count--;
        countLabel->setText(QString::number(count));
        qDebug() << "減少至:" << count;
    }
};

實(shí)際應(yīng)用場(chǎng)景

1. 音量調(diào)節(jié)按鈕

class VolumeControl : public QWidget
{
    Q_OBJECT
public:
    VolumeControl(QWidget *parent = nullptr)
    {
        QHBoxLayout *layout = new QHBoxLayout(this);
        
        QPushButton *volDown = new QPushButton("??", this);
        QPushButton *volUp = new QPushButton("??", this);
        
        // 音量減小按鈕:延遲稍長(zhǎng),間隔稍慢
        volDown->setAutoRepeat(true);
        volDown->setAutoRepeatDelay(500);
        volDown->setAutoRepeatInterval(150);
        
        // 音量增大按鈕:同樣的設(shè)置
        volUp->setAutoRepeat(true);
        volUp->setAutoRepeatDelay(500);
        volUp->setAutoRepeatInterval(150);
        
        layout->addWidget(volDown);
        layout->addWidget(volUp);
        
        connect(volDown, &QPushButton::clicked, this, &VolumeControl::decreaseVolume);
        connect(volUp, &QPushButton::clicked, this, &VolumeControl::increaseVolume);
    }

private slots:
    void decreaseVolume() {
        // 減小音量邏輯
        qDebug() << "音量減小";
    }
    
    void increaseVolume() {
        // 增大音量邏輯
        qDebug() << "音量增大";
    }
};

2. 游戲控制

class GameController : public QWidget
{
    Q_OBJECT
public:
    GameController(QWidget *parent = nullptr)
    {
        // 方向控制按鈕
        QPushButton *leftBtn = new QPushButton("←", this);
        QPushButton *rightBtn = new QPushButton("→", this);
        
        // 快速響應(yīng):短延遲,快間隔
        leftBtn->setAutoRepeat(true);
        leftBtn->setAutoRepeatDelay(200);
        leftBtn->setAutoRepeatInterval(30);
        
        rightBtn->setAutoRepeat(true);
        rightBtn->setAutoRepeatDelay(200);
        rightBtn->setAutoRepeatInterval(30);
        
        connect(leftBtn, &QPushButton::pressed, []() {
            qDebug() << "向左移動(dòng)開(kāi)始";
        });
        connect(leftBtn, &QPushButton::released, []() {
            qDebug() << "向左移動(dòng)結(jié)束";
        });
        connect(leftBtn, &QPushButton::clicked, []() {
            qDebug() << "向左移動(dòng)一步";
        });
        
        connect(rightBtn, &QPushButton::clicked, []() {
            qDebug() << "向右移動(dòng)一步";
        });
    }
};

注意事項(xiàng)

  1. 信號(hào)觸發(fā)順序

    • 按下時(shí)觸發(fā)一次 pressed()
    • 延遲后開(kāi)始周期性觸發(fā) clicked()
    • 釋放時(shí)觸發(fā)一次 released()
  2. 性能考慮

    • 間隔時(shí)間不宜過(guò)短,避免過(guò)多信號(hào)導(dǎo)致性能問(wèn)題
    • 復(fù)雜的槽函數(shù)需要優(yōu)化處理
  3. 用戶(hù)體驗(yàn)

    • 根據(jù)場(chǎng)景調(diào)整延遲和間隔時(shí)間
    • 快速調(diào)整用短間隔,精確控制用長(zhǎng)間隔
  4. 與其他信號(hào)的配合

// 可以同時(shí)監(jiān)聽(tīng)多個(gè)信號(hào)
connect(button, &QPushButton::pressed, []() {
    qDebug() << "按鈕按下";
});

connect(button, &QPushButton::released, []() {
    qDebug() << "按鈕釋放";
});

connect(button, &QPushButton::clicked, []() {
    qDebug() << "按鈕點(diǎn)擊(自動(dòng)重復(fù)時(shí)多次觸發(fā))";
});

到此這篇關(guān)于Qt中QAbstractButton::setAutoRepeat設(shè)置按住按鈕自動(dòng)重復(fù)的文章就介紹到這了,更多相關(guān)Qt按住按鈕自動(dòng)重復(fù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

麦盖提县| 秦皇岛市| 黄浦区| 米林县| 成武县| 望奎县| 崇州市| 台北县| 中方县| 磴口县| 茌平县| 衡水市| 阿拉善左旗| 丰顺县| 呼玛县| 高邮市| 林甸县| 乌海市| 昌黎县| 沙雅县| 新龙县| 望城县| 行唐县| 敦煌市| 牟定县| 焦作市| 桃江县| 工布江达县| 隆尧县| 恩平市| 汨罗市| 荣成市| 寿光市| 崇礼县| 赣州市| 乌苏市| 德惠市| 邵阳县| 江孜县| 湟源县| 上蔡县|