QT計算器的功能實現(xiàn)步驟記錄
1. 成果UI界面預覽

2. 功能簡介
(1)數(shù)字的加減乘除模運算;
(2)對已輸入的數(shù)字按位刪除功能,一鍵清除功能;
(3)語音播報:實時播報輸入的按鍵。
3. 實現(xiàn)步驟
1. 創(chuàng)建一個帶ui文件的Widget項目
2. 自由設計ui界面
需用到若干按鈕(pushButton)和兩個行編輯器(lineEdit)
按鈕的樣式表
設置樣式表:選中按鈕 -> 右鍵 -> 改變樣式表 -> 輸入代碼(提供按鈕樣式表代碼如下以供參考)
QPushButton
{
background-color: rgb(255, 170, 0);
color: rgb(255, 255, 255);
border-radius:10px; /*邊框角弧度:0~最小邊/2 px;*/
}
/*鼠標懸停樣式:偽狀態(tài)選擇*/
QPushButton:hover
{
font: 700 9pt "Microsoft YaHei UI";
background-color: rgb(46, 46, 46);
color: rgb(255, 255, 255);
border-radius:10px; /*邊框角弧度:0~最小邊/2 px;*/
}3. 完成各個按鍵的槽函數(shù)
生成槽函數(shù)步驟:選中按鈕 -> 右鍵 -> 轉到槽
(1)語音播報功能的實現(xiàn)
添加頭文件 #include <QtTextToSpeech> -> 定義私有成員變量 QTextToSpeech speaker; -> 在按鈕槽函數(shù)中使用(在下方的槽函數(shù)中實現(xiàn))
(2)0-9數(shù)字按鈕
以數(shù)字按鈕1、2為例,槽函數(shù)以及代碼實現(xiàn)如下(其他數(shù)字按鈕槽函數(shù)實現(xiàn)方式相同,只需更換按鈕名字)
void Widget::on_btnNum_1_clicked()
{
speaker.say("1"); //語言播報
if(ui->lineEdit_show->text() == "0") //避免出現(xiàn)0開頭的數(shù)字
ui->lineEdit_show->setText(ui->btnNum_1->text());
else
ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnNum_1->text());
}
void Widget::on_btnNum_2_clicked()
{
speaker.say("2"); //語言播報
if(ui->lineEdit_show->text() == "0") //避免出現(xiàn)0開頭的數(shù)字
ui->lineEdit_show->setText(ui->btnNum_2->text());
else
ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnNum_2->text());
}(3)運算符按鈕
以數(shù)字按鈕 “ 點 ”、“ 加 ”運算符為例,槽函數(shù)以及代碼實現(xiàn)如下(其他運算符按鈕槽函數(shù)實現(xiàn)方式相同,只需更換按鈕名字)
void Widget::on_btnOpe_point_clicked()
{
speaker.say("點");
if (ui->lineEdit_show->text().isEmpty())
{ return; }
ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnOpe_point->text());
}
void Widget::on_btnOpe_add_clicked()
{
speaker.say("加");
if (ui->lineEdit_show->text().isEmpty())
{ return; }
ui->lineEdit_show->setText(ui->lineEdit_show->text() + ui->btnOpe_add->text());
}(4)等于按鈕
void Widget::on_btnOpe_equal_clicked()
{
speaker.say("等于");
QString data = ui->lineEdit_show->text(); //獲取用戶輸入的運算表達式
ui->lineEdit_result->setText(data); //將表達式備份到另一個行編輯器
float res = 0, a, b;
if(data.contains("%"))
{
QStringList lst = data.split("%");
a = lst[0].toFloat();
b = lst[1].toFloat();
res = int(a) % int (b);
}
if(data.contains("+"))
{
a = data.split("+")[0].toFloat();
b = data.split("+")[1].toFloat();
res = a + b;
}
if(data.contains("-"))
{
a = data.split("-")[0].toFloat();
b = data.split("-")[1].toFloat();
res = a - b;
}
if(data.contains("×"))
{
a = data.split("×")[0].toFloat();
b = data.split("×")[1].toFloat();
res = a * b;
}
if(data.contains("÷"))
{
a = data.split("÷")[0].toFloat();
b = data.split("÷")[1].toFloat();
res = a / b;
}
ui->lineEdit_show->setText(QString("%1").arg(res)); //%1為占位符
}(5)按位刪除、清空按鈕
void Widget::on_btnOpe_del_clicked()
{
speaker.say("刪除");
// 獲取當前文本框內(nèi)容
QString currentText = ui->lineEdit_show->text();
if (!currentText.isEmpty())
{
// 刪除最后一個字符
currentText.chop(1);
// 更新文本框內(nèi)容
ui->lineEdit_show->setText(currentText);
}
}
void Widget::on_btnClear_clicked()
{
speaker.say("清空");
ui->lineEdit_show->clear();
}
4. 總結
1. 計算器是很適合QT入門的練手小項目,用到的部件只有按鈕和行編輯器,組成較為簡單,適合入門理解、熟悉QT的編程框架。
2. 想了解更多QT項目的同學歡迎瀏覽主頁相關文章!
到此這篇關于QT計算器功能實現(xiàn)步驟的文章就介紹到這了,更多相關QT計算器功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

