Learning QWidget!!
由于qt中的可视控件都是继承于QWidget这个类,所以其他的空间有很多属性都是QWidget的属性;在学习其他空间之前,得了解QWidget;
看QWidget的manual就可以发现,qt提供原子的用户接口,它接收鼠标事件,键盘事件,还有其他从系统窗口来的事件,以及在窗口绘制其本身;所有的widget都是矩形的,他们以Z轴排序;子窗口都在父窗口前面;还有在构建一个widget的时候,所有的widget都接收两个参数:
他的父窗口是谁(默认为0):QWidget *parent = 0
他的窗口标记(默认为顶级窗口):Qt::WindowFlags f = 0
Qt::WindowFlags
通过它可以定制窗口显示,比如最大化,最小化,关闭按钮,帮助按钮,只要设置相应的位,比如只显示关闭按钮:
myframe->setWindowFlags(Qt::CustomizeWindowHint|
Qt::WindowCloseButtonHint);
区分顶级窗口和子窗口:
Qt说没有父窗口的窗口就是顶级窗口,也就是没有父部件的部件一般都是独立的窗口,可以分别setWindowTitle(),setWindowIcon();title和icon都是窗口部件的属性;
没有窗口部件小部件就是子部件;这话有点拗口;上原话:Non-window widgets are child widgets,displayed within their parent widgets;
定制的窗口:涉及到QPainter class;或者用paintEvent(),这里QT提供了一个例子,Analog Clock example;或者使用Graphics View Framework;
有两种方式设置一个widget的大小:
setGeometry(int x,int y,int w,int h);resize(int w,int h);resize(QSize&size)
当窗口大小改变,会接收到这个事件:resizeEvent(QResizeEvent * event);
Qt中的事件:
如何检测一个子部件的鼠标事件,只要在handler中调用子部件的underMouse()函数就可以判断,返回true表示是单击或者其他这个子部件;
可以看Scribble example的实现,去参考事件的使用;
常用的事件:
Mouseevent
1、paintEvent();
2、resizeEvent();
3、mousePressEvent();
4、mouseReleaseEvent()
5、mouseDoubleClickEvent();
Keyboardevent
1、keyPressEvent()
2、focusInEvent()
3、focusOutEvent()
有其他不常用的:
1、mouseMoveEvent()
2、keyReleaseEvent()
3、wheelEvent()
4、enterEvent()
5、leaveEvent()
6、moveEvent()
7、closeEvent()
这里是相关功能和属性:
Context | Functions and Properties |
Window functions | show(), hide(), raise(), lower(), close(). |
Top-level windows | windowModified, windowTitle, windowIcon, windowIconText, isActiveWindow, activateWindow(), minimized, showMinimized(), maximized, showMaximized(),fullScreen, showFullScreen(), showNormal(). |
Window contents | update(), repaint(), scroll(). |
Geometry | pos, x(), y(), rect, size, width(), height(), move(), resize(), sizePolicy, sizeHint(), minimumSizeHint(), updateGeometry(), layout(), frameGeometry, geometry,childrenRect, childrenRegion, adjustSize(), mapFromGlobal(), mapToGlobal(), mapFromParent(), mapToParent(), maximumSize, minimumSize, sizeIncrement,baseSize, setFixedSize() |
Mode | visible, isVisibleTo(), enabled, isEnabledTo(), modal, isWindow(), mouseTracking, updatesEnabled, visibleRegion(). |
Look and feel | style(), setStyle(), styleSheet, cursor, font, palette, backgroundRole(), setBackgroundRole(), fontInfo(), fontMetrics(). |
Keyboard focus functions | focus, focusPolicy, setFocus(), clearFocus(), setTabOrder(), setFocusProxy(), focusNextChild(), focusPreviousChild(). |
Mouse and keyboard grabbing | grabMouse(), releaseMouse(), grabKeyboard(), releaseKeyboard(), mouseGrabber(), keyboardGrabber(). |
Event handlers | event(), mousePressEvent(), mouseReleaseEvent(), mouseDoubleClickEvent(), mouseMoveEvent(), keyPressEvent(), keyReleaseEvent(), focusInEvent(),focusOutEvent(), wheelEvent(), enterEvent(), leaveEvent(), paintEvent(), moveEvent(), resizeEvent(), closeEvent(), dragEnterEvent(), dragMoveEvent(),dragLeaveEvent(), dropEvent(), childEvent(), showEvent(), hideEvent(), customEvent(). changeEvent(), |
System functions | parentWidget(), window(), setParent(), winId(), find(), metric(). |
Interactive help | setToolTip(), setWhatsThis() |
Widget的样式表(style sheets)
知道有这个东西就行了暂时;用到的时候知道在哪里找;
透明度和双缓冲
创建半透明窗口