該程序命名為Lucky,實現的功能如下:
1. 加載抽獎人員名單,并保存加載路徑;
2. 單擊左鍵或者點擊ctrl+s開始抽獎,并滾動顯示人員名單,顯示的人員名單格式為 部門-姓名。
3. 單擊左鍵或者點擊ctrl+s停止抽獎,并固定顯示中獎人員名單。
工具:Qt5.13 + msvc2015
①:滾動顯示名單
②:抽獎開始/停止顯示
③:名單路徑及加載按鈕
抽獎程序,簡單來說,需要有人員名單+抽獎功能,至于獎品,本程序未實現顯示獎品的功能,只是一個簡易的抽獎小程序。
使用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);}
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();}
程序打開加載路徑,使用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();}
總結下來,本程序用到的點有:
其中最重要的是定時器及隨機數的使用。
詳細代碼地址:https://download.csdn.net/download/sinat_41752325/15416138
參考:https://blog.csdn.net/m0_37907070/article/details/72843132
不足之處請指出,不勝感激!!!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
北京到成都動車最快幾小時?北京到成都有最快的高鐵,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是什么意思?日內反向操作技術指標,又稱逆勢操作指數...