Qt系列文章之 QMessageBox
上一篇文章介紹了如何使用QDataStream來實現(xiàn)對界面信息的二進制序列化儲存和讀入操作;采用的是關(guān)閉窗口就默認(rèn)保存界面信息,其實有的時候我們不一定非要對當(dāng)前版本的信息進行保存,此時可以給用戶彈出一個信息對話框讓用戶選擇是否保存配置信息到文件。
信息對話框 QMessageBox
信息對話框是非常常用的界面元素,Qt的實現(xiàn)方式是QMessageBox。QMessageBox的幫助文檔讀者可以參考Qt的幫助手冊:
QmessageBox的屬性和方法很多,可以按照普通的類來實例化對象,然后調(diào)用對象。不過一般信息對話框只是在需要的時候才會使用,使用完成后希望盡快從內(nèi)容消除掉,因此在對Qt的信息對話框使用時很少進行實例化,而是直接調(diào)用QMessageBox提供的幾個常用的靜態(tài)方法直接使用,常用的QMessageBox的靜態(tài)方法有如下幾個,讀者可以自行查閱其幫助文檔的描述。
緊接著上一篇文章的內(nèi)容,來對closeEvent(QCloseEvent *event)事件函數(shù)做一些處理,希望在關(guān)閉界面時提醒用戶是否保存配置。
首先在頭文件包含QMessageBox:
#include <QMessageBox>在事件函數(shù)中構(gòu)造一個信息對話框。
首先需要定義一個QMessageBox::StandardButton來接受用戶選擇的控件類型:
然后來構(gòu)造一個信息對話框:
reply = QMessageBox::information( //調(diào)用靜態(tài)屬性this, //父對象指針"Information", //對話框標(biāo)題"Do you want to save the configration information to file?", //對話框提示信息QMessageBox::Yes|QMessageBox::No); //構(gòu)建用戶可以選擇的按鈕控件信息對話框的樣式如下:
構(gòu)造了兩個按鈕供用戶選擇Yes 和 No,當(dāng)用戶選擇No,說明不希望保存信息,直接關(guān)閉界面并退出:
f(reply==QMessageBox::StandardButton::No) //如果用戶選擇 No按鈕,不保存文件 直接退出{QMainWindow::closeEvent(event); //最后將事件處理權(quán)交回父類}如果用戶選擇是Yes 再繼續(xù)執(zhí)行后續(xù)的配置信息保存代碼。
然后編譯運行代碼,默認(rèn)的界面信息如下:
我們做一些修改:
關(guān)閉時我們選擇No:
再次打開界面內(nèi)容還是和第一次打開的界面內(nèi)容一致。
新的closeEvent(QCloseEvent *event)代碼如下:
void mainWindow::closeEvent(QCloseEvent *event) {/*編寫你的事件處理函數(shù)*/QMessageBox::StandardButton reply; //新建一個StandardButton來儲存用戶的響應(yīng)reply = QMessageBox::information( //調(diào)用靜態(tài)屬性this, //父對象指針"Information", //對話框標(biāo)題"Do you want to save the configration information to file?", //對話框提示信息QMessageBox::Yes|QMessageBox::No); //構(gòu)建用戶可以選擇的按鈕控件if(reply==QMessageBox::No) //如果用戶選擇 No按鈕,不保存文件 直接退出{return QMainWindow::closeEvent(event); //最后將事件處理權(quán)交回父類}//如果用戶選擇Yes 繼續(xù)執(zhí)行下面保存配置的代碼QFile file("config.ini");if(!file.open(QIODevice::WriteOnly | QIODevice::Text))return; //打開失敗關(guān)閉QDataStream out(&file);out.setVersion(QDataStream::Qt_4_0); //最好設(shè)置數(shù)據(jù)保存版本out<<ui->lineEdit_input->text() //寫入編輯框的值<<qint8(ui->downList->currentIndex()); //寫入下拉菜單編號qint8 rowCount = ui->tableWidget->rowCount(); //寫入表格行數(shù)out<<rowCount;for (int i=0;i<rowCount;i++) { //寫入表格每行內(nèi)容out<<ui->tableWidget->item(i,0)->text()<<ui->tableWidget->item(i,1)->text();}file.close(); //關(guān)閉文件return QMainWindow::closeEvent(event); //最后將事件處理權(quán)交回父類 }本文介紹了QMessageBox的使用原理并結(jié)合代碼開發(fā)了一個應(yīng)用場景。后續(xù)將繼續(xù)介紹Qt 界面開發(fā)相關(guān)的模塊。
歡迎同好溝通交流,批評指正,歡迎關(guān)注我的公號:不如起而行之
總結(jié)
以上是生活随笔為你收集整理的Qt系列文章之 QMessageBox的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts s标签中的s:select
- 下一篇: 芯片设计流程及各步骤使用工具简介