Qt中标准对话框实例,QObject::tr()的作用
函數?tr()全名是QObject::tr(),被它處理的 字符串可以 使用工具提 取出來翻譯 成其他語言, 也就是做國際化使用。
只要記住,Qt?的最佳實踐:如果你想讓你的程序國際化的話,那么,所有用戶可見的字符串都要使用?QObject::tr()!
但是,為什么我們沒有寫?QObject::tr(),而僅僅是?tr()呢?原來,tr()函數是定義在?Object里面的,所有使用了?Q_OBJECT?宏的類都自動具有?tr()函數。
在書中看到的一句話,如果想要你做的程序國際化,就把所有用戶可見的字符串寫到tr()中去,可直接用工具翻譯成多語言的版本.
目錄
- 一、顏色對話框
- 二、文件對話框
- 三、字體對話框
- 四、輸入對話框
- 五、消息對話框
- 六、進度對話框
- 七、錯誤信息對話框
- 八、向導對話框
Qt 提供了一些常用的對話框類型,全部繼承自 QDialog 類,并增加了自己的特色功能,比如獲取顏色、顯示特定信息等。
回到頂部
一、顏色對話框
顏色對話框類 QColorDialog 提供了一個可以獲取指定顏色的對話框部件。
/*** 第一種方式 ***/ //QColor color = QColorDialog::getColor(Qt::red, this, tr("顏色對話框"),QColorDialog::ShowAlphaChannel); //qDebug() <<"color:" <<color;/*** 第二種方式 ***/ QColorDialog dialog(Qt::red, this); // 創建對象 dialog.setOption(QColorDialog::ShowAlphaChannel); // 顯示 alpha 選項 dialog.exec(); // 以模態方式運行對話框 QColor color = dialog.currentColor(); // 獲取顏色對話框當前顏色 qDebug() <<"color:" <<color; // 輸出顏色信息第一種方式,使用了 QColorDialog 的靜態函數?getColor()?來獲取顏色,它的3個參數的作用分別是設置初始顏色、父窗口和對話框標題。第一種方式的好處是不用不用創建對象。但是如果想要更靈活地設置時,采用第二種方式,先創建對象,然后進行各項設置。兩者的實現效果是等效的。
回到頂部
二、文件對話框
文件對話框類 QFileDialog 提供了一個允許用戶選擇文件或文件夾的對話框。
QString fileName = QFileDialog::getOpenFileName(this, tr("文件對話框"), "F:",tr("圖片文件(* png * jpg)"));- 這個函數的4個參數的作用分別是:指定父窗口、 設置對話框標題、指定默認打開的目錄路徑和設置文件類型過濾器。如果不指定文件過濾器,默認是選擇所有類型的文件。
- 這里只選擇 png 和 jpg 兩種格式的圖片文件(注意代碼中 * png 和 * jpg 之間需要一個空格),那么在打開的文件對話框中只能顯示目錄下這兩種格式的文件。
還可以設置多個不同類別的過濾器,不同類別間使用兩個分號 “;;” 隔開,例如添加文本文件類型:
QString fileName = QFileDialog::getOpenFileName(this, tr("文件對話框"), "F:",tr("圖片文件(* png * jpg);;文本文件(* txt)"));前面這個程序只能選擇單個文件,要同時選擇多個文件,可以使用?getOpenFileNames()?函數, 例如:
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("文件對話框"), "F:",tr("圖片文件(* png * jpg);;文本文件(* txt)"));除了上面的兩個函數,QFileDialog 類還提供了?getSaveFileName()?函數來實現保存文件對話框和文件另存為對話框,還有?getExistingDirectory()?函數來獲取一個已存在的文件夾路徑。
回到頂部
三、字體對話框
字體對話框 QFontDialog 類提供了一個可以選擇字體的對話框部件。
// ok 用于標記是否單擊了 OK 按鈕。然后獲得選擇的字體 bool ok; QFont font = QFontDialog::getFont(&ok, this); // 如果單擊 Cancel 按鈕,那么更改字體 if (ok)ui->pushButton_3->setFont(font); elseqDebug() <<tr("沒有選擇字體!");這里使用了 QFileDidog 類的?getFont()?靜態函數來獲取選擇的字體。第一個參數是 bool 類型變量,用來存放按下的按鈕狀態,比如在打開的字體對話框中單擊了 OK 按鈕,那么這里的 ok 就為 true,從而告訴用戶已經選擇了字體。
回到頂部
四、輸入對話框
輸人對話框 QInputDialog 類用來提供一個簡單方便的對話框,從而從用戶那里獲取一個單一的數值或字符串。
bool ok;// 獲取字符串 QString string = QInputDialog::getText(this, tr("輸入字符串對話框"),tr("請輸入用戶名:"),QLineEdit::Normal, tr("admin"), &ok); if(ok) qDebug() <<tr("string:") <<string;// 獲取整數 int value1 = QInputDialog::getInt(this, tr("輸入整數對話框"),tr("請輸入 -1000到1000之間的數值"), 100, -1000, 1000, 10, &ok); if(ok)qDebug() <<tr("value1:") <<value1;// 獲取浮點數 double value2 = QInputDialog::getDouble(this, tr("輸入浮點數對話框"),tr("請輸入-1000到1000之間的數值"), 0.00, -1000, 1000, 2, &ok); if(ok) qDebug() << "value2:" << value2;// 獲取條目 QString item = QInputDialog::getItem(this, tr("輸入條目對話框"),tr("請選擇或輸入一個條目"), items, 0, true, &ok); if(ok) qDebug() << "item:" << item;這里一共創建了 4 個不同類型的輸入對話框。
- getText() 函數可以提供一個可輸入字符串的對話框,參數的作用分別是:指定父窗口、設置窗口標題、設置對話框中的標簽的顯示文本、設置輸入的字符串的顯示模式、設置輸人框中的默認字符串和設置獲取按下按鈕信息的 bool 變量。
- getInt() 函數可以提供一個輸入整型數值的對話框,其中的參數100表示默認的數值是100,-1000表示可輸入的最小值是-1000,1000表示可輸人的最大值是1000,10表示使用箭頭按鈕,數值每次變化10。
- getDouble() 函數可以提供一 個輸人浮點型數值的對話框,其中的參數2表示小數的位數為2。
- getltem() 函數提供一個可以輸入一個條目的對話框,需要先給它提供一些條目,例如這里定義的QStringList類型的items。它的參數0表示默認顯示列表中的第0個條目;然后是參數true,設置條目是否可以被更改,true就是可以被更改。
回到頂部
五、消息對話框
消息對話框 QMessageBox 類提供了 一個模態的對話框用來通知用戶一些信息,或者向用戶提出一個問題并且獲取答案。
// 問題對話框 int ret1 = QMessageBox::question(this, tr("問題對話框"),tr("你了解Qt嗎?"), QMessageBox::Yes, QMessageBox::No); if(ret1 == QMessageBox::Yes) qDebug() << tr("問題!");// 提示對話框 int ret2 = QMessageBox::information(this, tr("提示對話框"),tr("這是Qt書籍!"), QMessageBox::Ok); if(ret2 == QMessageBox::Ok) qDebug() << tr("提示!");// 警告對話框 int ret3 = QMessageBox::warning(this, tr("警告對話框"),tr("不能提前結束!"), QMessageBox::Abort); if(ret3 == QMessageBox::Abort) qDebug() << tr("警告!");// 錯誤對話框 int ret4 = QMessageBox::critical(this, tr("嚴重錯誤對話框"),tr("發現一個嚴重錯誤!現在要關閉所有文件!"), QMessageBox::YesAll); if(ret4 == QMessageBox::YesAll) qDebug() << tr("錯誤");// 關于對話框 QMessageBox::about(this, tr("關于對話框"),tr("yafeilinux致力于Qt及Qt Creator的普及工作!"));這里創建了4個不同類型的消息對話框,分別擁有不同的圖標及提示音(這個是操作系統設置的),參數分別是父窗口、標題欄、顯示信息和擁有的按鈕。這里使用的按鈕都是 QMessageBox 類提供的標準按鈕,可以根據返回值來判斷用戶按下了哪個按鈕。
about()?函數沒有返回值,因為它默認只有一個按鈕,與其相似的還有一個?aboutQt()?函數,用來顯示現在使用的 Qt 版本等相關信息。如果想使用自己的圖標和自定義按鈕,那么可以創建 QMessageBox 類對象,然后使用相關函數進行操作。
回到頂部
六、進度對話框
進度對話框 QProgressDialog 對一個耗時較長的操作進度提供了反饋。
QProgressDialog dialog(tr("文件復制進度"), tr("取消"), 0, 50000, this); dialog.setWindowTitle(tr("進度對話框")); // 設置窗口標題 dialog.setWindowModality(Qt::WindowModal); // 將對話框設置為模態 dialog.show();// 演示復制進度 for(int i=0; i<50000; i++) { dialog.setValue(i); // 設置進度條的當前值QCoreApplication::processEvents(); // 避免界面凍結if(dialog.wasCanceled()) // 按下取消按鈕則中斷break; }dialog.setValue(50000); // 這樣才能顯示100%,因為for循環中少加了一個數 qDebug() << tr("復制結束!");這里創建了一個 QProgressDialog 類對象 dialog,構造函數的參數分別為對話框的標簽內容、取消按鈕的顯示文本、最小值、最大值和父窗口。然后將其設置為了模態對話框并顯示。
后面的 for() 循環語句模擬了文件復制過程,使用?setValue()?函數使進度條向前推進。為了避免長時間的操作而使用戶界面凍結,必須不斷調用 QCoreApplication 類的靜態函數?processEvents (), 可以將它放在 for() 循環語句中。
然后使用 QProgressDialog 的?wasCanceled()?函數來判斷用戶是否單擊了 “取消”按鈕,如果是, 則中斷復制過程。這里使用了模態對話框,其實 QProgressDialog 還可以實現非模態對話框,不過它需要定時器等的幫助。
回到頂部
七、錯誤信息對話框
錯誤信息對話框 QErrorMessage 類提供了一個顯示錯誤信息的對話框。
QErrorMessage *errordlg = new QErrorMessage(this);;errordlg->setWindowTitle(tr("錯誤信息對話框")); errordlg->showMessage(tr("這里是出錯信息!"));這里新建了一個 QErrorMessage 對話框,并且調用它的?showMessage()?函數來顯示錯誤信息,調用這個函數時對話框會以非模態的形式顯示出來。
回到頂部
八、向導對話框
向導對話框 QWizard 類提供了一個設計向導界面的框架。對于向導對話框讀者應該已經很熟悉了,比如安裝軟件時的向導和創建項目時的向導。QWizard之所以被稱為框架,是因為它具有設計一個向導的全部功能函數,可以使用它來實現想要的效果。Qt 演示程序中的 Dialogs 分類下有 Trivial Wizard、License Wizard 和 Class Wizard這3個示例程序,可以參考一下。
這里定義了 3 個返回值為 QWizardPage 類對象的指針的函數,用來生成3個向導頁面:
QWizardPage * MyWidget::createPage1() // 向導頁面1 {QWizardPage *page = new QWizardPage;page->setTitle(tr("介紹"));return page; }QWizardPage * MyWidget::createPage2() // 向導頁面2 {QWizardPage *page = new QWizardPage;page->setTitle(tr("用戶選擇信息"));return page; }QWizardPage * MyWidget::createPage3() // 向導頁面3 {QWizardPage *page = new QWizardPage;page->setTitle(tr("結束"));return page; }// 向導對話框 void MyWidget::on_pushButton_clicked() {QWizard wizard(this);wizard.setWindowTitle(tr("向導對話框"));wizard.addPage(createPage1()); // 添加向導頁面wizard.addPage(createPage2());wizard.addPage(createPage3());wizard.exec(); }這里新建了 QWizard 類對象,然后使用?addPage()?函數為其添加了 3 個頁面,這里的參數是 QWizardPage 類型的指針,所以直接使用了生成向導頁面函數。運行程序可以看到,向導頁面出現的順序和添加向導頁面的順序是一致的。
到這里,Qt提供的幾個標準對話框就基本講完了。其實還有3個與打印有關的標準對話框類QPageSetupDialog(頁面設置對話框)、QPrintDialog(打印對話框)和 QPrintPreviewDialog(打印預覽對話框)這里暫時不介紹。關于這些對話框的使用,Qt提供了一個示例程序 Standard Dialogs,它在 Dialogs 分類中。
總結
以上是生活随笔為你收集整理的Qt中标准对话框实例,QObject::tr()的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins 详细安装、构建部署 使用
- 下一篇: 进程,线程,消息循环的关系