Qt滑塊圖片驗(yàn)證碼

Qt滑塊圖片驗(yàn)證碼

@[toc]

(一)将塑、控件介紹

  1. 自定義隨機(jī)圖片
  2. 滑動(dòng)條滑動(dòng)驗(yàn)證
  3. 重定義驗(yàn)證圖片
  4. 摳圖位置隨機(jī)

(二)燥透、效果圖

1.gif
2.gif
void PuzzleWidget::setPixmap(const QString& pixmap)
{
    m_pixmap = pixmap;
    QTimer::singleShot(10, this, SLOT(onUpdatePixmap()));
}

void PuzzleWidget::onUpdatePixmap()
{
    m_offsetPoint.rx() = qBound(0, qrand() % this->width() + squarewidth + squareradius, this->width() - squarewidth - squareradius);
    m_offsetPoint.ry() = qBound(0, qrand() % this->height() + squarewidth + squareradius, this->height() - squarewidth - squareradius);
    update();
}

void PuzzleWidget::setValue(int value)
{
    m_value = qBound(0, value, this->width() - squarewidth - squareradius + m_offsetPoint.x());
    update();
}

void PuzzleWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing);
    QPainterPath clippath;
    clippath.addRoundedRect(this->rect(), 4, 4);
    painter.setClipPath(clippath);
    const QPixmap& pixmap = QPixmap(m_pixmap).scaled(this->width(), this->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    painter.drawPixmap(0, 0, this->width(), this->height(), pixmap);

    QPainterPath cutoutpath;
    cutoutpath.setFillRule(Qt::WindingFill);
    QRect rect(m_offsetPoint, QSize(squarewidth, squarewidth));
    cutoutpath.addRoundedRect(rect, 2, 2);
    cutoutpath.addEllipse(rect.center().x() - squareradius / 2, rect.top() - squareradius + 6, squareradius, squareradius);
    QPainterPath subellipseparh;
    subellipseparh.addEllipse(rect.right() - squareradius + 6, rect.center().y() - squareradius / 2, squareradius, squareradius);
    cutoutpath -= subellipseparh;

    painter.setPen(QPen(QColor(80, 80, 80), 1));
    painter.setBrush(QColor(100, 100, 100, 220));
    painter.drawPath(cutoutpath);

    QPixmap puzzlePixmap(this->size());
    puzzlePixmap.fill(Qt::transparent);
    QPainter puzzlePainter(&puzzlePixmap);
    puzzlePainter.setRenderHints(QPainter::Antialiasing);
    puzzlePainter.setClipPath(cutoutpath);
    puzzlePainter.setPen(QPen(QColor(80, 80, 80), 2));
    puzzlePainter.setBrush(QColor(200, 200, 200, 100));
    puzzlePainter.drawPixmap(0, 0, this->width(), this->height(), pixmap);
    puzzlePainter.drawPath(cutoutpath);

    painter.drawPixmap(-m_offsetPoint.x() + m_value, 0, this->width(), this->height(), puzzlePixmap);
}

bool PuzzleWidget::isOverlap()
{
    return qAbs(-m_offsetPoint.x() + m_value) < 5;
}

工程文件

Qt交流大會(huì)(收費(fèi)群) 853086607
QQ 3246214072


在這里插入圖片描述

結(jié)尾

不定期上傳新作品题禀,解答群中作品相關(guān)問題。相關(guān)外撮抓,能解答則解答。歡迎大家一起探索Qt世界

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茎截,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赶盔,更是在濱河造成了極大的恐慌稼虎,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件招刨,死亡現(xiàn)場(chǎng)離奇詭異霎俩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沉眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門打却,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谎倔,你說我怎么就攤上這事柳击。” “怎么了片习?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵捌肴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我藕咏,道長(zhǎng)状知,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任孽查,我火速辦了婚禮饥悴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盲再。我一直安慰自己西设,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布答朋。 她就那樣靜靜地躺著贷揽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梦碗。 梳的紋絲不亂的頭發(fā)上禽绪,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音叉弦,去河邊找鬼丐一。 笑死藻糖,一個(gè)胖子當(dāng)著我的面吹牛淹冰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巨柒,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼樱拴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柠衍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晶乔,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤珍坊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后正罢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阵漏,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年翻具,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了履怯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裆泳,死狀恐怖叹洲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情工禾,我是刑警寧澤运提,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站闻葵,受9級(jí)特大地震影響民泵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜槽畔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一洪灯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟痰,春花似錦签钩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莽鸿,卻和暖如春昧旨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祥得。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工兔沃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人级及。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓乒疏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親饮焦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怕吴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 本篇文章已授權(quán)微信公眾號(hào) guolin_blog (郭霖)獨(dú)家發(fā)布轉(zhuǎn)載請(qǐng)標(biāo)明出處: http://www.jian...
    張旭童閱讀 11,913評(píng)論 22 98
  • 作者簡(jiǎn)介 原創(chuàng)微信公眾號(hào)郭霖 WeChat ID: guolin_blog 本篇來自 老老司機(jī)(第六篇了)張旭童的...
    木木00閱讀 3,107評(píng)論 0 15
  • 使用Java生成圖片滑動(dòng)驗(yàn)證碼 目前接到了一個(gè)新的小需求窍侧,要在登錄時(shí)進(jìn)行滑動(dòng)圖片驗(yàn)證。搜了一下網(wǎng)上的demo转绷,沒有...
    滄海千尋閱讀 14,025評(píng)論 8 57
  • 我們的身體仿佛一件塵世的器皿 每夜的沉睡是我們的更新 伴隨太陽的來臨 我們的器皿每一天都是新的 從上帝而造 塵世之...
    彩虹雪閱讀 271評(píng)論 5 7
  • 在困境里伟件,我們唯一能做也是唯一值得做的就是相信,我們都是注定會(huì)得救的议经,無論是以什么方式還是用多長(zhǎng)時(shí)間斧账。
    貓膩兒和癟犢子閱讀 276評(píng)論 0 2