Qt浅谈之三:内置标准对话框
来源:互联网 发布:吴碧霞 知乎 编辑:程序博客网 时间:2024/05/21 16:53
一、简介
Qt提供了一套标准的通用对话框,极大的提高了使用者的开发效率。本文收集了大部分标准的对话框,用户需要使用时只须复制相应的部分代码就行,不用再到处查找。
二、运行图
三、详解
1、中文翻译
(1)内置对话框的翻译
#include <QTextCodec>#include <QLibraryInfo>#include <QLocale>#include <QTranslator>#include <QDebug>{ QString translatorFileName = QLatin1String("qt_"); translatorFileName += QLocale::system().name(); QTranslator *translator = new QTranslator(&app); if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { app.installTranslator(translator); }}也可以使用如下,更容易理解:
{ bool bFinded = false; QString str = "QTDIR=/usr/share/qt4"; str = str.mid(6); bFinded = translator.load("qt_" + QLocale::system().name(), str.append("/translations/")); if(bFinded) { qApp->installTranslator(&translator); qDebug() << QObject::tr("支持中文的Qt国际化翻译文件!"); } else { qDebug() << QObject::tr("没有支持中文的Qt国际化翻译文件!"); }}(2)coder中文支持,出现乱码时可以切换
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030")); //Windows下
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); //Unix/Linux下
2、颜色对话框
{ QPalette palette = displayTextEdit->palette(); const QColor& color = QColorDialog::getColor(palette.color(QPalette::Base), this); if(color.isValid()) { palette.setColor(QPalette::Base, color); displayTextEdit->setPalette(palette); }}
3、错误信息框
{ QErrorMessage box(this); box.setWindowTitle(tr("错误信息框")); box.showMessage(tr("错误信息框实例xx。")); box.showMessage(tr("错误信息框实例xx。")); box.showMessage(tr("错误信息框实例xx。")); box.showMessage(tr("错误信息框实例yy。")); box.showMessage(tr("错误信息框实例zz。")); box.exec();}
勾选“再次显示这个消息”,相同的消息会出现多次。若不勾选,则上述的“错误信息框实例xx。”只显示一次。
4、打开文件信息框
{ QString fileName = QFileDialog::getOpenFileName(this, tr("打开文件"), "/", tr("任何文件(*.*)" ";;文本文件(*.txt)" ";;C++文件(*.cpp)")); if (fileName.length() != 0) { displayTextEdit->setText(fileName); }}
QFileDialog提供了很多静态函数,用于获取用户选择的文件。getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框。当然也可以使用QFileDialog类,该类提供的始终是Qt自己绘制的对话框,而不都是调用系统资源API。具体的各个参数的含义可以查看Qt的帮助文档。
{ QFileDialog *fileDialog = new QFileDialog(this); fileDialog->setWindowTitle(tr("Open Image")); fileDialog->setDirectory("."); fileDialog->setFilter(tr("Source Files(*.cpp *.c)")); if(fileDialog->exec() == QDialog::Accepted) { QString path = fileDialog->selectedFiles()[0]; displayTextEdit->setText(path); //QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path); } else { //QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files.")); }}
5、打开多个文件对话框
比上述打开文件对话框多了个打开多个对话框的功能,其他一样。
void CBuiltinDlg::MultiOpenFile(){ QStringList files = QFileDialog::getOpenFileNames( this, tr("Select one or more files to open"), "/", tr("All Files (*);;Text Files (*.txt)")); if (files.count()) { displayTextEdit->setText(QString("[%1]").arg(files.join(", "))); }}
6、保存文件对话框
与打开文件对话框类似。也提供本地的对话框和Qt自己绘制的对话框。
void CBuiltinDlg::SaveFileName(){ /* //getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框 QFileDialog::Options options; QString selectedFilter; options |= QFileDialog::DontUseNativeDialog; QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), displayTextEdit->toPlainText(), tr("file (*.cpp *.c *.txt)"), &selectedFilter, options); if (!fileName.isEmpty()) { //save fileName displayTextEdit->setText("save file:" + fileName); } */ //QFileDialog提供的始终是Qt自己绘制的对话框 QFileDialog* saveFileDialog = new QFileDialog(this); saveFileDialog->setWindowTitle(QString("Save File")); saveFileDialog->setFileMode(QFileDialog::AnyFile); saveFileDialog->setNameFilter(tr("file (*.cpp *.c *.txt)")); QString* fileName=new QString(); if(saveFileDialog->exec()) *fileName = saveFileDialog->getSaveFileName(); if(fileName->size() > 0) { displayTextEdit->setText("save file:" + *fileName); } delete fileName; fileName = NULL;}
7、字体对话框
{ bool ok; const QFont& font = QFontDialog::getFont(&ok, displayTextEdit->font(), this, tr("字体对话框")); if(ok) {// 如果<确定>,设置字体. displayTextEdit->setFont(font); }}
8、页设置对话框
{ QPrinter printer; QPageSetupDialog dlg(&printer, this); dlg.setWindowTitle(tr("页设置对话框")); if (dlg.exec() == QDialog::Accepted) { // 进行下一步的处理。 }}
9、选择文件夹对话框
可以通过options选项设置对话框显示的文件类型,与打开文件对话框类似。void CBuiltinDlg::GettExistingDirectory(){ QFileDialog::Options options = QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly; options |= QFileDialog::DontUseNativeDialog; QString directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"), "/home", options); if (!directory.isEmpty()) displayTextEdit->setText(directory);}
10、进度对话框
显示文件复制或文件下载的进度条。
{ QProgressDialog progress(tr("正在复制文件..."), tr("取消"), 0, 1000, this); QFont font("ZYSong18030",10); progress.setFont(font); progress.setWindowModality(Qt::WindowModal); progress.setWindowTitle(tr("进度对话框")); progress.show(); for (int i = 0; i < 1000; i++) { progress.setValue(i); qApp->processEvents(); if (progress.wasCanceled()) break; QTest::qWait(1); //... 复制文件处理。 } progress.setValue(1000);}
11、打印对话框
{ QPrinter printer; QPrintDialog dlg(&printer, this); dlg.setWindowTitle(tr("打印对话框")); if (dlg.exec() == QDialog::Accepted) { // 进行下一步的处理。 }}
12、输入对话框
输入对话框包括:字符串输入、下拉列表框输入、Int类型输入和Double类型输入。void CBuiltinDlg::slotName(){ bool ok; QString name = QInputDialog::getText(this, tr("用户名"), tr("请输入新的用户名:"), QLineEdit::Normal, "name", &ok); if(ok && !name.isEmpty()) { displayTextEdit->setText(name); }}void CBuiltinDlg::slotSex(){ QStringList list; list << tr("男") << tr("女"); bool ok; QString sex = QInputDialog::getItem(this,tr("性别"), tr("请选择性别:"),list,0,false,&ok); if (ok) { displayTextEdit->setText(sex); }}void CBuiltinDlg::slotAge(){ bool ok; int age = QInputDialog::getInteger(this,tr("年龄"), tr("请输入年龄:"), 20,0,150,1,&ok); if(ok) { displayTextEdit->setText(QString(tr("%1")).arg(age)); }}void CBuiltinDlg::slotStature(){ bool ok; double high = QInputDialog::getDouble(this,tr("身高"), tr("请输入身高:"),175.00,0,230.00,1,&ok); if(ok) { displayTextEdit->setText(QString(tr("%1")).arg(high)); }}
13、消息对话框
消息对话框如下:void CBuiltinDlg::slotQuestion(){ switch(QMessageBox::question(this,tr("询问"),tr("重新开始?"), QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok)) { case QMessageBox::Ok: displayTextEdit->setText(tr("询问按钮 / 确定")); break; case QMessageBox::Cancel: displayTextEdit->setText(tr("询问按钮 / 取消")); break; default: break; }}void CBuiltinDlg::slotInformation(){ QMessageBox::information(this,tr("提示"),tr("提示信息")); displayTextEdit->setText(tr("提示信息框"));}void CBuiltinDlg::slotWarning(){ switch(QMessageBox::warning(this,tr("警告"),tr("是否要保存文档?"), QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save)) { case QMessageBox::Save: displayTextEdit->setText(tr("警告对话框 / 保存")); break; case QMessageBox::Discard: displayTextEdit->setText(tr("警告对话框 / 不保存")); break; case QMessageBox::Cancel: displayTextEdit->setText(tr("警告对话框 / 取消")); break; default: break; }}void CBuiltinDlg::slotCritical(){ QMessageBox::critical(this, tr("错误"),tr("告诉用户一个严重的错误!")); displayTextEdit->setText(tr("错误信息框"));}void CBuiltinDlg::slotAbout(){ QMessageBox::about(this,tr("关于"),tr("对话框例子!")); displayTextEdit->setText(tr("关于信息框"));}void CBuiltinDlg::slotAboutQt(){ QMessageBox::aboutQt(this, tr("关于Qt")); displayTextEdit->setText(tr("关于Qt信息框"));}void CBuiltinDlg::slotCustom(){ QMessageBox customMsgBox; customMsgBox.setWindowTitle(tr("自定义弹出对话框")); QPushButton *lockButton = customMsgBox.addButton(tr("加锁"),QMessageBox::ActionRole); QPushButton *unlockButton = customMsgBox.addButton(tr("解锁"),QMessageBox::ActionRole); QPushButton *cancelButton = customMsgBox.addButton(QMessageBox::Cancel); customMsgBox.setText(tr("这是自定义对话框")); customMsgBox.exec(); if(customMsgBox.clickedButton() == lockButton) displayTextEdit->setText(tr("自定义对话框 / 加锁")); if(customMsgBox.clickedButton() == unlockButton) displayTextEdit->setText(tr("自定义对话框 / 解锁")); if(customMsgBox.clickedButton() == cancelButton) displayTextEdit->setText(tr("自定义对话框 / 取消"));}
14、向导对话框
创建一个向导对话框,可以在页面上添加各种控件。
void CBuiltinDlg::slotWizard(){ QWizard wizard; wizard.addPage(createFirstPage()); wizard.addPage(createSecondPage()); wizard.setWindowTitle(tr("向导对话框")); wizard.exec();}QWizardPage* CBuiltinDlg::createFirstPage(){ QWizardPage *page = new QWizardPage; page->setTitle(tr("简介")); QLabel *label = new QLabel(tr("第一页")); label->setWordWrap(true); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(label); page->setLayout(layout); return page;}QWizardPage* CBuiltinDlg::createSecondPage(){ QWizardPage *page = new QWizardPage; page->setTitle(tr("正文")); QLabel *label = new QLabel(tr("第二页")); label->setWordWrap(true); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(label); page->setLayout(layout); return page;}
15、颜色控件框
void CBuiltinDlg::slotColor(int index){ QStringList colorList = QColor::colorNames(); QColor color = QColor(colorList[index]); QPalette p = displayTextEdit->palette(); p.setColor(QPalette::Text, color); displayTextEdit->setPalette(p);}可以选择使用Qt内置的颜色。
四、总结
(1)大家还有什么内置的对话框可以提供的,可以留言。
(2)完整源码已经打包上传到csdn上可登录下载(http://download.csdn.net/detail/taiyang1987912/7515977)。
(3)若需要沟通可以联系yang.ao@i-soft.com.cn。
- Qt浅谈之三:内置标准对话框
- Qt浅谈之三:内置标准对话框
- Qt浅谈之内置标准对话框
- QT 内置标准对话框
- QT学习 之 对话框 (三) 标准颜色对话框
- QT之标准对话框
- Qt标准对话框之QColorDialog
- Qt标准对话框之QMessageBox
- Qt标准对话框之QFileDialog
- Qt标准对话框之QMessageBox
- Qt标准对话框之QMessageBox
- Qt标准对话框之QFileDialog
- Qt标准对话框之QMessageBox
- Qt标准对话框之QMessageBox
- Qt标准对话框之QMessageBox
- QT之标准对话框使用
- Qt标准对话框之QMessageBox
- Qt标准对话框之QMessageBox
- 2014 android google 更新 不能访问
- 声飘伞下
- 北京市基本医疗保险A类定点医疗机构
- Oracle 11g R2 RAC 前置条件相关脚本
- python机器学习之adaboost元算法
- Qt浅谈之三:内置标准对话框
- javascript 实现datagrid
- 电脑管家版WiFi共享精灵简介
- VCC AVCC VDD AVDD区别
- Qt编程7:Qt定时器 QTimer使用
- TeamViewer一个很好的免费远程控制软件
- 数据库触发器详解
- 项目实现过程中遇到的问题记录(一)------------使用AsyncTask时,doInBackground没有立即执行
- ASP.NET Web API 2 对 CORS 的支持