《C++ GUI Qt 4 编程》 笔记(六)
2016-08-29 12:42
435 查看
博客搬家自 http://zhouyuanchao.com/wordpress/archives/77
第17章 提供在线帮助
工具提示
状态提示 显示在状态栏上
What's This? 文本帮助
当处于what's this模式下时(windows 标题栏问号按钮 或shift + f1)
单击窗体,将显示设置的帮助文本
QWhatsThis::createAction();
当用户按下F1键或单击Help菜单项时,应用程序主窗口会调用help()槽
QTextBrowser
QWidget::setAttribute(Qt::WA_DeleteOnClose)
// 通常模式对话框不允许和这个应用程序中的其他任何窗口进行交互
// 以下代码允许这种交互
QWidget::setAttribute(Qt::WA_GroupLeader)
textBrowser->documentTitle();
Qt Assitant库
.pro
CONFIG += assistant
第三部分 Qt高级
第19章 Unicode
QTextCodec::codecForLocale() 获得本地字符集
让应用程序感知翻译
1. tr()
2. 程序启动时,载入一个翻译文件.qm
另一种方式:
lupdate工具
不要含有变量
应该这样
QT_TRANSLATE_NOOP("上下文", "xxx");
禁止const char* 到QString的隐含转换
在包含任意Qt头文件之前预先定义:
QT_NO_CAST_FROM_ASCII
或在.pro中
DEFINES += QT_NO_CAST_FROM_ASCII
QLocale 提供本地化的数字和日期以及时间格式
动态改变语言
只需重新加载翻译文件,然后重新设置需要翻译的文本
翻译应用程序:
1. 运行lupdate,从应用程序的源代码中提取所有用户可见的字符串
2. 使用Qt Linguist翻译应用程序
3. 运行lrelease,生成二进制的.qm文件,应用程序可以使用QTranslator加载这个文件
在.pro中加入需要支持的语言
当第一次运行lupdate时会创建这两个文件xml格式
ts - translate source
qm - Qt Message
TRANSLATIONS = spreadsheet_de.ts spreadSheet_fr.ts
lupdate -verbose spreadsheet.pro
CODECFORTR = ...
QTextCodec::setCodecForTr()
lrelease -verbose spreadsheet.pro
第19章 自定义外观
三种方法重新定义Qt内置窗口部件的外观
1. 子类化窗口部件类
2. 子类化QStyle或者一个预定义的风格比如QWindowStyle,Qt通过这种方法为不同平台提供基于平台的外观
3. Qt样式表 受CSS启发
样式表作用于上层的当前激活的QStyle上,因为创建样式表不引入任何子类,所以它们适合对现有窗口部件做微小的定制。
例如:
想在应用程序中的所有QLineEdit中使用黄色作为背景色
QObject::setProperty()
QStyle
内置样式类:
QStyle
|- QCommonStyle
| |-QWindowStyle
| |-QCleanlookStyle
| |-QMacStyle
| |-QPlastiqueStyle
| |-QWindowsXPStyle
| |-QWindowsVistaStyle
|
|- QMotifStyle
|- QCDEStyle
class MyPushButton : public QWidget
QApplication::setStyle() // 设置整个应用程序的样式
QWidget::setStyle() // 为个别窗口部件设置样式
drawControl()函数被各种QStyle的子类重新实现,用于绘制窗口部件
第20章 三维绘图 OpenGL
1. 子类化QGLWidget
2. 实现几个虚函数
3. 连接QtOpenGL OpenGL库
.pro
QT += opengl
OpenGL QPainter结合
在paintEvent()函数绘制
1. 创建一个QPainter
2. 使用QPainter绘制背景
3. 保存OpenGL状态
4. 使用OpenGL操作绘制场景
5. 恢复OpenGL状态
6. 使用QPainter绘制前景
7. 销毁QPainter
QGLWidget::renderText()
使用帧缓存对象生成叠加
基本思路:
1. opengl渲染到纹理
2. 将纹理绘制到窗口
3. 将选择框绘制到窗口
假如只有窗口大小改变时才重新opengl渲染
这时,假如选择框的大小改变,而窗口大小没有改变时,则只需要绘制一张纹理和一个选择框,模型并不需要频繁渲染。
第17章 提供在线帮助
工具提示
findButton->setToolTip(tr("Find next")); newAction = new QAction(tr("&New"), this); newAction->setToolTip(tr("New document"));
状态提示 显示在状态栏上
newAction->setStatusTip(tr("Create a new document"));
What's This? 文本帮助
dialog->setWhatsThis(tr("<img src=...")); // 可以使用HTML对文本进行格式化
当处于what's this模式下时(windows 标题栏问号按钮 或shift + f1)
单击窗体,将显示设置的帮助文本
QWhatsThis::createAction();
当用户按下F1键或单击Help菜单项时,应用程序主窗口会调用help()槽
void MainWindow::help() { QUrl url(directoryOf("doc").absoluteFilePath("index.html")); url.setScheme("file"); url.setFragment("editing"); // 锚 <a name="editing"></a> QDesktopServices::openUrl(url); }
QDir dir(QApplication::applicationDirPath()); dir.cdUp(); //上级目录
QTextBrowser
QWidget::setAttribute(Qt::WA_DeleteOnClose)
// 通常模式对话框不允许和这个应用程序中的其他任何窗口进行交互
// 以下代码允许这种交互
QWidget::setAttribute(Qt::WA_GroupLeader)
textBrowser->setSearchPaths(QStringList() << path << ":/images"); textBrowser->setSource(page);
// 只要页面发生改变,就会发送sourceChanged()信号 connect(textBrower, SIGNAL(sourceChanged(const QUrl&)), this, SLOT(updateWindowTitle));
textBrowser->documentTitle();
Qt Assitant库
.pro
CONFIG += assistant
// 参数指定Qt Assistant程序所在路径 // 空字符串表示在PATH环境变量中查找 QAssistantClient* assistant = new QAssistantClient(""); assistant->showPage(path);
第三部分 Qt高级
第19章 Unicode
QTextCodec::codecForLocale() 获得本地字符集
让应用程序感知翻译
1. tr()
2. 程序启动时,载入一个翻译文件.qm
另一种方式:
QCoreApplication::translate("上下文", "原文本", "注释");
lupdate工具
不要含有变量
const char* appName = "xxx"; tr(appName); // 错误
应该这样
const char* appName = QT_TR_NOOP("xxx"); tr(appName);
QT_TRANSLATE_NOOP("上下文", "xxx");
禁止const char* 到QString的隐含转换
在包含任意Qt头文件之前预先定义:
QT_NO_CAST_FROM_ASCII
或在.pro中
DEFINES += QT_NO_CAST_FROM_ASCII
// 加载翻译文件 QTranslator appTranslator; appTranslator.load("myapp_" + QLocale::system().name, qmPath); app.installTranslator(&appTranslator);
QLocale 提供本地化的数字和日期以及时间格式
动态改变语言
只需重新加载翻译文件,然后重新设置需要翻译的文本
翻译应用程序:
1. 运行lupdate,从应用程序的源代码中提取所有用户可见的字符串
2. 使用Qt Linguist翻译应用程序
3. 运行lrelease,生成二进制的.qm文件,应用程序可以使用QTranslator加载这个文件
在.pro中加入需要支持的语言
当第一次运行lupdate时会创建这两个文件xml格式
ts - translate source
qm - Qt Message
TRANSLATIONS = spreadsheet_de.ts spreadSheet_fr.ts
lupdate -verbose spreadsheet.pro
CODECFORTR = ...
QTextCodec::setCodecForTr()
lrelease -verbose spreadsheet.pro
第19章 自定义外观
三种方法重新定义Qt内置窗口部件的外观
1. 子类化窗口部件类
2. 子类化QStyle或者一个预定义的风格比如QWindowStyle,Qt通过这种方法为不同平台提供基于平台的外观
3. Qt样式表 受CSS启发
样式表作用于上层的当前激活的QStyle上,因为创建样式表不引入任何子类,所以它们适合对现有窗口部件做微小的定制。
例如:
想在应用程序中的所有QLineEdit中使用黄色作为背景色
QLineEdit { background-color:yellow; }
// 为整个应用程序设置一个样式表 qApp->setStyleSheet("QLineEdit {background-color:yellow;}"); lineEdit->setStyleSheet("background-color:yellow;");
QObject::setProperty()
QStyle
内置样式类:
QStyle
|- QCommonStyle
| |-QWindowStyle
| |-QCleanlookStyle
| |-QMacStyle
| |-QPlastiqueStyle
| |-QWindowsXPStyle
| |-QWindowsVistaStyle
|
|- QMotifStyle
|- QCDEStyle
class MyPushButton : public QWidget
void MyPushButton::paintEvent(QPaintEvent* event) { QPainter painter(this); QStyleOptionButton option; option.initFrom(this); if (isFlat()) option.features |= QStyleOptionButton::Flat; option.text = text(); style()->drawControl(QStyle::CE_PushButton, &option, painter, this); }
QApplication::setStyle() // 设置整个应用程序的样式
QWidget::setStyle() // 为个别窗口部件设置样式
drawControl()函数被各种QStyle的子类重新实现,用于绘制窗口部件
第20章 三维绘图 OpenGL
1. 子类化QGLWidget
2. 实现几个虚函数
3. 连接QtOpenGL OpenGL库
// 构造函数中 setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer)); // 重写QGLWidget::initializeGL() qglClearColor(Qt::black); glShadeMode(GL_FLAT); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); // 重写QGLWidget::resizeGL() glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLfloat x = GLfloat(width) / height; glFrustum(-x, x, -1.0, 1.0, 4.0, 15.0); glMatrixMode(GL_MODELVIEW()); // 重写QGLWidget::paintGL() glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); draw(); // 自定义函数,使用OpenGL函数绘图 // 选择鼠标点处的面方法见书371页 // main函数 QApplication app(argc, argv); if (!QGLFormat::hasOpenGL()) return 1; MyWidget win; win.setWindowTitle(QObject::tr("Title")); win.resize(300, 300); win.show(); return app.exec();
.pro
QT += opengl
OpenGL QPainter结合
在paintEvent()函数绘制
1. 创建一个QPainter
2. 使用QPainter绘制背景
3. 保存OpenGL状态
4. 使用OpenGL操作绘制场景
5. 恢复OpenGL状态
6. 使用QPainter绘制前景
7. 销毁QPainter
QGLWidget::renderText()
使用帧缓存对象生成叠加
基本思路:
1. opengl渲染到纹理
2. 将纹理绘制到窗口
3. 将选择框绘制到窗口
假如只有窗口大小改变时才重新opengl渲染
这时,假如选择框的大小改变,而窗口大小没有改变时,则只需要绘制一张纹理和一个选择框,模型并不需要频繁渲染。
相关文章推荐
- 《C++ GUI Qt 4 编程》 笔记(一)
- 《C++ GUI Qt 4 编程》 笔记(七)
- 《C++ GUI Qt 4 编程》 笔记(三)
- 《C++ GUI Qt 4 编程》 笔记(五)
- 《C++ GUI Qt 4 编程》 笔记(四)
- C++ GUI QT 编程(第二版) -第3章 (创建对话框)_2
- C++ GUI QT 编程(第二版) -第4章 实现功能源码简介_1
- C++ GUI Qt 4 编程(第二版)
- 《C++ GUI Qt4 编程(第二版)》――读书心得
- C++ GUI Qt 编程(第二版)第8章 Diagram_1(实现主对话框)
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt5试用
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt窗体的类型状态布局
- C++ GUI QT 编程(第二版) -第2章 (sort)对话框
- C++ GUI Qt 编程(第二版)第8章 Diagram_2(实现主对话框)
- 在C++ GUI Qt中使用QCA进行安全性编程之一
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt编码问题
- C/C++_log2000_空白窗口3及初步gui编程笔记
- C++ GUI Qt 4 编程-第八章 基于项的图形视图
- C++ GUI Qt 4编程(第二版)