1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          Qt實現抽獎程序

          來源:互聯網轉載 時間:2024-01-29 08:08:49

          一、簡介

          該程序命名為Lucky,實現的功能如下:

          1. 加載抽獎人員名單,并保存加載路徑;
          2. 單擊左鍵或者點擊ctrl+s開始抽獎,并滾動顯示人員名單,顯示的人員名單格式為 部門-姓名。
          3. 單擊左鍵或者點擊ctrl+s停止抽獎,并固定顯示中獎人員名單。

          工具:Qt5.13 + msvc2015

          二、界面顯示

          ①:滾動顯示名單
          ②:抽獎開始/停止顯示
          ③:名單路徑及加載按鈕

          三、詳解

          抽獎程序,簡單來說,需要有人員名單+抽獎功能,至于獎品,本程序未實現顯示獎品的功能,只是一個簡易的抽獎小程序。

          3.1 加載名單并保存路徑功能實現

          使用QFileDialog::getOpenFileName()函數加載人員名單文件。

          或者直接粘貼路徑,利用QLineEdit的editingFinished信號獲取到路徑。

          SaveSettings()函數把加載的文件路徑保存下來,保存路徑在luckySet.ini文件。使用QSettings類保存。

          代碼如下:

          void Dialog::on_pushButton_openFile_clicked(){    m_loadFile = QFileDialog::getOpenFileName(this,tr("選擇文件"),QDir::currentPath(),QString("(*.txt *.csv)"));    if(m_loadFile.isempty())    {        QMessageBox::warning(this,tr("WARNING"),tr("NOT select FILE"));        return;    }    ui->LineEdit_list->setText(m_loadFile);    SaveSettings();}void Dialog::on_LineEdit_list_editingFinished(){    m_loadFile = ui->LineEdit_list->text();    SaveSettings();}void Dialog::SaveSettings(){    QSettings setting(m_iniFile,QSettings::IniFormat);    setting.setValue("path/path",m_loadFile);}

          3.2 抽獎功能實現

          1.單擊左鍵或者點擊ctrl+s鍵開始/停止抽獎,需要使用Qt事件系統中的鼠標事件和鍵盤事件。重載mousePressEvent()和keyPressEvent()函數。

          代碼如下:

          void Dialog::mousePressEvent(QMouseEvent *event){    if(event->button() == Qt::LeftButton)//單擊左鍵    {        SelectWinner();    }}void Dialog::keyPressEvent(QKeyEvent *event){    if(event->modifiers() == Qt::ControlModifier)//點擊ctrl鍵    {        if(event->key() == Qt::Key_S)//點擊s鍵        {            SelectWinner();        }    }}

          2.滾動名單每隔一定時間顯示,需要使用Qt的定時器QTimer類實現。
          定時器使用需要:

          - setInterval()設定定時周期
          - 綁定超時信號timeout()到自定義的槽函數
          - 調用start()函數啟動定時器
          - 調用stop()函數停止定時器

          構造函數部分代碼如下:

          timer1 = new QTimer(this);connect(timer1,SIGNAL(timeout()),this,SLOT(onRangeChanged()));//

          其中timer1在頭文件中聲明,onRangeChanged()是自定義的槽函數,代碼如下:

          void Dialog::onRangeChanged(){    int num = m_listPerson.size();//人員名單個數    if(num == 0)//全部都中獎后重新加載名單開啟第二輪抽獎    {        GetListFromFile(m_loadFile);        num = m_listPerson.size();    }    winner = qrand()%num;    qDebug() << winner;    m_strWinner = m_listPerson[winner].department + "-" + m_listPerson[winner].name;    ui->label_show->setText(m_strWinner);//顯示部門+姓名}

          SelectWinner()函數設置定時器的開啟和停止,代碼如下:

          void Dialog::SelectWinner(){    if(("停止") == ui->label_run->text())    {        ui->label_run->setText("開始");        timer1->stop();        m_listPerson.remove(winner);    }    else    {        GetListFromFile(m_loadFile);        ui->label_run->setText("停止");        timer1->setInterval(150);        qsrand((uint)(QTime::currentTime().msec()));        qDebug() << "開始";        timer1->start();    }    ui->label_show->setText(m_strWinner);}

          GetListFromFile()函數從文件中獲取到名單列表,代碼如下:

          void Dialog::GetListFromFile(const QString &file){    QFile csvFile(file);    if(!csvFile.open(QIODevice::Text | QIODevice::ReadOnly))    {        QMessageBox::warning(this,tr("WARNING"),tr("OPEN FILE ERROR"));        return ;    }    QTextStream textStream(&csvFile);    QTextCodec* codec = QTextCodec::codecForName("GBK");    textStream.setCodec(codec);    QString strHeader = textStream.readLine();    QString strLine = textStream.readLine();    T_ListofPerson person;    while (!strLine.isEmpty()) {        QStringList strList = strLine.split(",");        person.number = strList.at(0);        person.name = strList.at(1);        person.department = strList.at(2);        m_listPerson.push_back(person);        strLine = textStream.readLine();    }    csvFile.close();}

          3.3 其它

          程序打開加載路徑,使用LoadSettings()函數實現,在構造函數中添加如下:

              m_iniFile = "luckySet.ini";    m_loadFile = ".csv";    LoadSettings();    ui->LineEdit_list->setText(m_loadFile);

          LoadSettings()實現如下:

          void Dialog::LoadSettings(){    QSettings setting(m_iniFile,QSettings::IniFormat);    m_loadFile = setting.value("path/path").toString();}

          四、總結

          總結下來,本程序用到的點有:

          1. 定時器
          2. 事件系統
          3. 隨機數
          4. QSettings類使用
          5. 文件操作

          其中最重要的是定時器及隨機數的使用。

          詳細代碼地址:https://download.csdn.net/download/sinat_41752325/15416138

          參考:https://blog.csdn.net/m0_37907070/article/details/72843132

          不足之處請指出,不勝感激!!!

          標簽:qt抽獎-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          北京到成都動車最快幾小時?北京到成都有最快的高鐵,G309到成都東,8:23到2:09。運行14小時46分鐘,沒有火車。Z91小時11分,11336028是8:39,價格是高鐵的一半。北京復興號動車到成都途經哪些站?答:目前北京到成都的高鐵有5趟,??空军c有北京西、石家莊站、保定站、涿州東站、邢臺站、邯鄲東站、安陽東站、鶴壁東站、新鄉東站、澠池南站、鄭州東站、洛陽龍門站、靈寶西站、洋縣西站、平頂山...

          汽車中控屏上的廣告怎么去除?在手機桌面點擊【網址導航】。進入界面點擊【我的】。直接進入我的界面點擊右上角的設置圖標。剛剛進入設置界面點擊【廣告過濾設置】。再次進入下一步,然后把把【廣告過濾開關按鈕】的按鈕自動打開表就行。艾酷neo5怎么設置側邊返回?進入到系統設置--系統導航--導航手勢,選擇“側邊前往”表就行。艾酷大屏導航工廠密碼是多少?3368密碼是3368。大部份車機的工廠密碼也是3368,...

          cdp化妝品是什么牌子?CDP化妝品的全稱是cle de peau beauty,也可以稱為CPB。中文翻譯是肌膚的關鍵,屬于資生堂頂級品牌。1997年正式上市,2001年進入中國市場。品牌在全球20多個國家和地區設立了300多個形象專柜。CPB系列產品為各類肌膚提供最基本的護理產品,同時也為個別肌膚提供特殊護理產品,讓肌膚展現自然優雅的美。CDP是什么意思?日內反向操作技術指標,又稱逆勢操作指數...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>