① QT中自定的.h文件应该存放在哪个目录
使用 Qt::WindowFlags 可以实现一些不同类型的窗口,如:用 Qt::FramelessWindowHint 来实现无边框窗口,用 Qt::Popup 来实现弹出式的窗口,用 Qt::Tool 来实现工具窗口,用Qt::CustomizeWindowHint 来关闭窗口标题栏以及与 Qt::WindowCloseButton(添加关闭按钮),Qt::WindowMaximumButtonSize(添加最大化按钮)联用来建立只有关闭按钮和最大化按钮的窗口,用 Qt::WindowStaysOnTopHint 使窗口永远在最前端等。 Qt::WidgetAttribute 使窗口支持透明背景以及在关闭后主动销毁。其它一些常用的 Attribute 有:Qt::WA_AcceptDrops 使 widget 支持拖拽操作,Qt::WA_MouseTracking 使 widget 及时响应鼠标移动事件(MouseMoveEvent)。 Qt::setMask() 函数对窗口进行部分区域遮掩来实现各种形状的窗口。部分代码解释:头文件: 1:#ifndef SHAPEDWIDGET_H 2:#define SHAPEDWIDGET_H 3: 4:#include <QWidget> 5:class QPoint; 6:class QPixmap; 7:class ShapedWidget : public QWidget 8: { 9: Q_OBJECT 10:public: 11:explicit ShapedWidget(QWidget *parent = 0); 12: ~ShapedWidget(); 13: 14:private slots: 15:void changeSkin(); 16: 17:protected: 18:void mousePressEvent(QMouseEvent *); 19:void mouseMoveEvent(QMouseEvent *); 20:void paintEvent(QPaintEvent *); 21: 22:private: 23:void initData(); 24:void initVisualComponents(); 25:void setupContextMenu(); 26: 27: QPoint* dragPos_; 28: QPixmap* backgroundPixmap_; 29: }; 30: 31:#endif // SHAPEDWIDGET_H构造: 1: ShapedWidget::ShapedWidget(QWidget *parent) : 2: QWidget(parent, Qt::FramelessWindowHint) //无边框窗体 3: { 4: initData(); //初始化数据,这个demo里面就两个,具体下面有解释 5: initVisualComponents(); //初始化私有可视部件,这个demo里面没有私有的其它部件,所以只做了窗口的一些属性设置 6: setupContextMenu(); //设置右键菜单,分配各种QAction内存空间以及连接SIGNALS和SLOTS 7: setAttribute(Qt::WA_DeleteOnClose); //关闭事件发生后就主动从内存中销毁窗口 8: setAttribute(Qt::WA_TranslucentBackground); //透明背景支持 9: } 拖拽移动窗体(下面有图示): 1:void ShapedWidget::mousePressEvent(QMouseEvent *event) 2: { 3:if(event->button() == Qt::LeftButton) 4: { 5: *dragPos_ = event->globalPos() - frameGeometry().topLeft(); 6: event->accept(); 7: } 8: } 9: 10:void ShapedWidget::mouseMoveEvent(QMouseEvent *event) 11: { 12:if(event->buttons() & Qt::LeftButton) 13: { 14: move(event->globalPos() - *dragPos_); 15: event->accept(); 16: } 17: } 窗口绘制: 1:void ShapedWidget::paintEvent(QPaintEvent *) 2: { 3: QPainter painter(this); 4: painter.fillRect(0, 0, backgroundPixmap_->width(), backgroundPixmap_->height(), *backgroundPixmap_); 5: } 更换皮肤: 1:void ShapedWidget::changeSkin() 2: { 3: QAction* source = qobject_cast<QAction*>(sender()); //获取发送该信号的信号源,并转换对象 4: backgroundPixmap_->load(source->data().toString()); //因为给每个 QAction 赋了图片的地址的字符串 5://所以可以通过 data() 来获取该值,并更新背景图片的内容 6: resize(backgroundPixmap_->width(), backgroundPixmap_->height()); //窗口大小尽可能小
② qt5.4 都添加了什么
一、Qt GUI方面:
1、QOpenGLContext已能够适配现有的native context(如EGL,GLX等)。这使得Qt可以跟其他框架交互,例如游戏引擎。
2、提高对OpenGL ES 3.0/3.1的支持。如果编译Qt库时打开“-opengl es2”选项,高版本的ES头文件会自动包含在Qt的头文件中。已经通过GLES3的接口支持Vertex array objects、 framebuffer blits 、 multisampling。
3、在Windows平台只要编译Qt库时打开 -opengl dynamic选项,那么基于该Qt库的应用程序在运行时可以动态地决定选用哪个OpenGL实现版(opengl32.dll 或者 ANFLE‘s OpenGL ES2.0)。不必为了使用不同的OpenGL而分别编译程序。
4、QOpenGLWidget:替代了原来的QGLWidget以及QQuickWidget中相应部分。
5、QOpenGLWindow:由于该类的存在,很方便的通过OpenGL将内容绘制到QWindow。
6、QRasterWindow:由于该类的存在,很方便的通过基于软件实现的QPainter将内容绘制到QWindow。
·「译注:不支持硬件加速的情况下,QPainter使用Raster纯软件的方式绘制图形」
7、支持“10位颜色通道”的图像(10-bit per color channels)。尽管Raster引擎内部只使用8位颜色通道,这些图像仍可以被渲染。如果被用作QOpenGLFramebufferObject的内部格式,在OpenGL驱动支持的情况下,OpenGL引擎可以全精度渲染。
8、WinRT:加入了对“原生文件对话框”的支持。
二、Qt Core
1、WinRT:加入对“native settings container”的支持。·「译注:没用过WinRT,不清楚作者指的是什么」
2、QStorageInfo:该类可以提供当前挂在的分区或设备的信息。
3、QByteArrayList:就像QStringList与QList<QString>,QByteArrayList在QList<QByteArray>之上添加里类似的额外功能。
4、QTabletEvent:添加了指示“哪些stylus button被按下”的信息;“rotation与tangentialPressure”在各平台有一致的范围;类似的事件还包括“stylus的类型”或其他在用的工具。为了提供更好的检测机制,改进了手工测试和调试的输出。
·「译注:没学习过移动开发,stylus button、tangentialPressure是个what?不理解其含义,翻译可能不正确。」
三、Qt Widgets
1、改进了基于DPI的widget缩放。
四、Qt Quick:
1、QQuickRenderControl,可以高效的在framebuffer中渲染QtQuick2画面。然后这些内容既可以被Qt OpenGL渲染器使用,也可以被第三方OpenGL渲染器使用。
2、对于ListView的头和尾,引入了覆盖和拖回操作(overlay and pull back)。
3、添加了QQuickFontMetrics类,该类提供“QFontMetricsF所含API”的子集。
4、添加里QQuickTextMetrics类。
5、Android平台现在也支持QQuickWidget。
五、Qt Quick Controls
1、安卓风格
六、Qt Bluetooth
1、支持Bluez5
2、蓝牙低能耗技术预览版(在Bluez4和Bluez5,并仅支持“client side”)
七、QPA插件
1、Wayland平台插件现在集成到了发布版。
2、XCB支持30位深的屏幕(即每颜色通道10位)。
3、fontconfig和GTK平台后端可以解析更多的字体设置。
4、More categorized logging is in use so that you can enable it in the standard ways (qtlogging.ini etc.) instead of needing to set obscure environment variables or uncomment #defines. The log also provides more complete information, especially about events.
·「注:看起来很有用,但我没能理解作者的意思,故附原文。」
5、XCB插件已经加入对“大于1的设备像素比(整数型)”的支持。可以通过QT_DEVICE_PIXEL_RATIO环境变量来控制设备像素比。
八、Qt WebEngine
1、QtWebKitWidgets支持OpenGL 2D加速的画布。
2、Qt WebKit模块已经行将就木,未来是Qt WebEngine的时代。Widget和QML中的WebKit API都将被取代。
九、Qt WebChannel
1、对于WebKit以及其他浏览器引擎,引入一个新的模块来跨越QML/C++与HTML/JS之间的隔阂。
十、Qt Windows Extras
1、在任务栏中,当划过应用时支持多个缩略图。
十一、Qt Sensors
1、Windows Phone:添加了电子罗盘和光线感应。
十二、Qt SQL
1、WPhone:支持sqlite