Wednesday, May 30, 2007

Bash Shell 快捷键的学习使用

ash Shell 快捷键的学习使用
from DBA notes by Fenng

作者:Fenng 发布在 dbanotes.net

这篇 Bash Shell Shortcuts 的快捷键总结的非常好。值得学习。下面内容大多数是拷贝粘贴与总结.
CTRL 键相关的快捷键:

Ctrl + a - Jump to the start of the line
Ctrl + b - Move back a char
Ctrl + c - Terminate the command //用的最多了吧?
Ctrl + d - Delete from under the cursor
Ctrl + e - Jump to the end of the line
Ctrl + f - Move forward a char
Ctrl + k - Delete to EOL
Ctrl + l - Clear the screen //清屏,类似 clear 命令
Ctrl + r - Search the history backwards //查找历史命令
Ctrl + R - Search the history backwards with multi occurrence
Ctrl + u - Delete backward from cursor // 密码输入错误的时候比较有用
Ctrl + xx - Move between EOL and current cursor position
Ctrl + x @ - Show possible hostname completions
Ctrl + z - Suspend/ Stop the command
补充:
Ctrl + h - 删除当前字符
Ctrl + w - 删除最后输入的单词

ALT 键相关的快捷键:
平时很少用。有些和远程登陆工具冲突。

Alt + < - Move to the first line in the history
Alt + > - Move to the last line in the history
Alt + ? - Show current completion list
Alt + * - Insert all possible completions
Alt + / - Attempt to complete filename
Alt + . - Yank last argument to previous command
Alt + b - Move backward
Alt + c - Capitalize the word
Alt + d - Delete word
Alt + f - Move forward
Alt + l - Make word lowercase
Alt + n - Search the history forwards non-incremental
Alt + p - Search the history backwards non-incremental
Alt + r - Recall command
Alt + t - Move words around
Alt + u - Make word uppercase
Alt + back-space - Delete backward from cursor // SecureCRT 如果没有配置好,这个就很管用了。

其他特定的键绑定:
输入 bind -P 可以查看所有的键盘绑定。这一系列我觉得更为实用。

Here "2T" means Press TAB twice
$ 2T - All available commands(common) //命令行补全,我认为是 Bash 最好用的一点
$ (string)2T - All available commands starting with (string)
$ /2T - Entire directory structure including Hidden one
$ 2T - Only Sub Dirs inside including Hidden one
$ *2T - Only Sub Dirs inside without Hidden one
$ ~2T - All Present Users on system from "/etc/passwd" //第一次见到,很好用
$ $2T - All Sys variables //写Shell脚本的时候很实用
$ @2T - Entries from "/etc/hosts" //第一次见到
$ =2T - Output like ls or dir //好像还不如 ls 快捷
补充:
Esc + T - 交换光标前面的两个单词

很多来自GNU 的 readline 库。另外一份总结也很好

记忆是所有技术人员的敌人。一次要把所有的都记住是不可能的。针对自己的使用习惯,对少数快捷键反复使用,短期内就会有效果。

中文分词模块 from Huang Jiahua

#!/usr/bin/python

# -*- coding: UTF-8 -*-
# Author: Huang Jiahua
# Last modified: 2004-08-25

__revision__ = '0.1'

#切分关键字,要求预先转换为 Unicode 类型
# 分开中文,非中文 -> 按 seps 列表分隔 -> 对中文二元分词 -> 合并 -> 返回数组

import sys
##sys.setappdefaultencoding('utf8')

#分隔关键字列表 seps 设置
seps=[]
seps=[" ","\t","\n","\r",",","<",">","?","!",
";","\#",":",".","'",'"',"(",")","{","}","[","]","|","_","=",
" ",",","?","。","、",""",""","《","》","[","]","!","(",")"]
# Unicode 编码的分隔关键字列表
def _utuni(strr):return unicode(strr,'utf8')
seps=map(_utuni,seps)

##_alkeys={}
_zhkeys={}
_askeys={}
# _zhstr , _asstr 存储 中文,非中文 数组
_zhstr = []
_asstr = []

def _zhsplitkey(stri):
# 对 stri 二元分词法
#存入全局字典 _zhkeys
global _zhkeys
ln = len(stri)
if ln == 1:
return stri
#拆分中文关键字,二元分词法
n = 0
while n < ln-1:
_zhkeys[stri[n]+stri[n+1]] = ''
n = n+1
## return keyy.keys()

def _fenzhas(stri):
# 分开中文和非中文,
# 存入全局数组 _zhstr , _asstr
global _asstr
global _zhstr
ln = len(stri)
_zhstr = []
_asstr = []
n = 0
m = 0
try:
stri[n] >= u'\u4e00'
except:
return 0

while n < ln:
if stri[n] >= u'\u4e00':
if m==0:_zhstr.append(' ')
_zhstr.append(stri[n])
## print 'z:',stri[n]
m=1
else:
if m==1:_asstr.append(' ')
_asstr.append(stri[n])
## print 'a:',stri[n]
m=2
n+=1
## print 'zh:',''.join(_zhstr)
## print 'as:',''.join(_asstr)

def _fenseps(stri):
# 按 seps 列表分隔, 返回分隔后数组
global seps
alkeys={}
n = 0
m = 0
ln=stri.__len__()
while n if stri[n] in seps:
alkeys[stri[m:n]]=''
m=n+1
n+=1
if n>m:alkeys[stri[m:n]]=''
return alkeys.keys()

def splitkey(stri):
"""Split the keys

Split the keys."""
# 接受 str 返回分词后数组
global _zhstr
global _asstr
global _zhkeys
global _askeys
_zhkeys = {}
_askeys = {}
_zhstr = []
_asstr = []
_fenzhas(stri) #分开中文,非中文,存入数组 _zhstr , _asstr
zhstr= _fenseps(''.join(_zhstr))
asstr= _fenseps(''.join(_asstr)) #?
_zhstr = []
_asstr = []
for i in zhstr:
_zhsplitkey(i) #中文分词放入字典 _zhkeys
for i in asstr:
_askeys[i]=''

alkeys = {}
alkeys.update(_zhkeys)
alkeys.update(_askeys)
_zhkeys = {}
_askeys = {}
return alkeys.keys()

if __name__=="__main__":
# 命令行测试
import sys
# sys.setappdefaultencoding('unicode')
enc = sys.stdin.encoding
if len(sys.argv) > 1:
keyy = sys.argv[1]
else:
keyy = sys.stdin.read()
## keyyy = splitkey(keyy.decode(enc))
keyyy = splitkey(keyy.decode('utf8'))
for i in keyyy:
## print i.encode(enc),
print i.encode('utf8'),

Monday, May 28, 2007

FreezePython with QT4

FreezePython -OOc --include-modules=sip --install-dir=dist_linux/dist2 --init-script=ConsoleSetLibPath ingc.py

Sunday, May 27, 2007

How to support input method in KDE/Qt application.

Author: Takumi ASAKI

Sometimes additional code is necessary to support input method in KDE/Qt application. This document will explain what's input method and how to support input method.

What's input method?

Input method is system to help user's keyboard input. Using input method, user can input characters that can not input from keyboard directly, and reduce cost of keyboard input. Input method is necessary for the user wants to input CJK(Chinese, Japanese, and Korean) and other language's characters.

In X Window System, XIM(X Input Method) is standard input method. Qt and KDE support XIM. But XIM is legacy system and lacks some features modern input method should have.

So, the input method systems other than XIM are developing now. IIIMF(Internet Intranet Input Method Framework), UIM(Universal Input Method), and SCIM(Smart Common Input Method platform).

Gtk+ supports these input methods using immodule. Qt supports only XIM. But immodule for Qt project tries to introduce immodule to Qt.

What's immodule?

immodule is plugable module for input method. It supports several input methods and can change input method dynamically.

Original Qt(without immodule patch) supports XIM only. So, user has to use XIM-bridge(ex. htt, uim-xim) when user wants to use the other input method. But with immodule patched Qt, user can use favorite input method directly.

Qt4(next major version of Qt) will take the result of the immodule for Qt project, and support immodule. If developer wants to support input method correct, sometimes some input method related code is necessary.

When do you need writing code to support input method?

case A)

Your application doesn't need input text.

You don't need to do anything.

case B)

Your application need input text. And you use only input widget in KDE or Qt library. (ex. QLineEdit, QTextEdit, and more)

You don't need to do anything. KDE and QT library's input widget supports input method correct. There is no need of additional code.

case C)

Your application need input text. And you want to support keyboard input in your own widget. (ex. kate, konsole, kolourpaint, koffice, and more)

You need writing code to support input method. See next section.

How to support input method in KDE/Qt application.

If you want to support keyboard input in your own widget(case C), you need writing code to support input method.

Step A)

Set inputMethodEnabled property to ture. inputMethodEnabled property can enable/disable input method. And default is false except some input widgets. If your widget accepts input from input method, set it to true using QWidget::setInputMethodEnabled() method.

setInputMethodEnabled( true );

note: Original qt can use input method even when inputMethodEnabled property is false. (original qt ignore this property.) it's bug(maybe) and it confuses user. ( When widget doesn't accept text input(e.g. QLabel, QPushButton), I can open input method's window on that widget. ) So qt with immodule check this property to use input method. If your qt is without immodule, it seems to do not need this step. But this is needed.

Step B)

Set microFocusHint for input method can get position of input place.

When widget shows or moves cursor, you should set microFocusHint using QWidget::setMicroFosucHint().

microFocusHint is a hint that input method get place of input. It's help for input method shows additional information at suitable place when user uses input method.

Step C)

Accpet QKeyEvent's text.

Create your widget's keyPressEvent() event handler. And check QKeyEvent::text() for input method's input.

When QKeyEvent::text() is not empty, widget should accept it as user input.

note: QKeyEvent::text() is used when user uses XIM and OverTheSpot style. If user uses OnTheSpot style or other input method, we can't get input method's input using this way. See Step D).

Step D)

Implement QIMEvent handlers.

Input method's inputs are sent by QIMEvent when user uses input method other than OverTheSpot style XIM.

Please see QIMEvent's document for detail. You should reimplement QWidget::imStartEvent(), QWidget::imComposeEvent(), and QWidget::imEndEvent().

QWidget::imStartEvent()
Remember cursor position to show composing string. (QIMEvent doesn't have it.)
QWidget::imComposeEvent()
Remember composing string(QIMEvent::text()) and cursor position(QIMEvent::cursorPos()) in it and selecting string length(QIMEvent::selectionLength). Then show it as composing(preedit) strings.
QWidget::imEndEvent()
In imEndEvent(), QIMEvent sends final text user commits. Accept QIMEvent::text() as final text.

Maybe that's all of input method support.

Please read and comment it.

Saturday, May 26, 2007

QCoreApplication::setLibraryPaths

void QCoreApplication::setLibraryPaths ( const QStringList & paths ) [static]

Sets the list of directories to search when loading libraries to paths. All existing paths will be deleted and the path list will consist of the paths given in paths.

See also libraryPaths(), addLibraryPath(), removeLibraryPath(), and QLibrary.

Friday, May 25, 2007

GIf support in Windows

(To configure Qt with GIF support, pass -qt-gif to the configure script or check the appropriate option in the graphical installer.)

Tuesday, May 22, 2007

MixIn

MixIn 技术 (感谢 limdou 的介绍)

def MixIn(pyClass, mixInClass):
print "Mix class:",mixInClass, " into: ",pyClass,'\n'
pyClass.__bases__ += (mixInClass,)

class A:
def __init__(self):
self.name = "Class A"
def fun(self):
print self.name

class B:
def __init__(self):
self.name = "Class B"
def add(self, a,b):
print 'function defined in B'
return a + b

obj_a = A()

print obj_a
print dir(obj_a),'\n'

MixIn(A,B)

print obj_a
print dir(obj_a),'\n'

print obj_a.add(3,5)


-----------------------------------------〉
执行结果:

>>>
<__main__.a>
['__doc__', '__init__', '__module__', 'fun', 'name']

Mix class: __main__.B into: __main__.A

<__main__.a>
['__doc__', '__init__', '__module__', 'add', 'fun', 'name']

function defined in B
8

解释一下 MixIn 技术,就是使 一个类成为另一个类的基类, 这样会使 被 MixIn 的那个类具有了新的特性。
在例子程序中, 我们将 B 类 MixIn 进 A 类, 成为 A 的基类,于是, A 类的实例便具有了 B 类的方法(add)


obj_a = A() obj_a 是 类 A 的一个实例

print obj_a <__main__.a>
print dir(obj_a),'\n' ['__doc__', '__init__', '__module__', 'fun', 'name']

MixIn(A,B) 将B MixIn 进 A

print obj_a <__main__.a>

print dir(obj_a),'\n' ['__doc__', '__init__', '__module__', 'add', 'fun', 'name']
注意,这时候,多了一个 add 方法(类B 中定义)

print obj_a.add(3,5) 现在 A 的实例可以使用 B 中的方法了

python中实现Single模式

#!/usr/bin/env python

#-*- coding:utf-8 -*-

class Singleton:

""" A python singleton """

class __impl:

""" Implementation of the singleton interface """

def spam(self):

""" Test method, return singleton id """

return id(Singleton.__instance)

# storage for the instance reference

__instance = None

def __init__(self):

""" Create singleton instance """

# Check whether we already have an instance

if Singleton.__instance is None:

# Create and remember instance

Singleton.__instance = Singleton.__impl()

# Store instance reference as the only member in the handle

self.__dict__['_Singleton__instance'] = Singleton.__instance

def __getattr__(self, attr):

""" Delegate access to implementation """

return getattr(self.__instance, attr)

def __setattr__(self, attr, value):

""" Delegate access to implementation """

return setattr(self.__instance, attr, value)

class SingletonType(type):

"""Singleton Metaclass"""

def __init__(cls, name, bases, dic):

super(SingletonType, cls).__init__(name, bases, dic)

cls.instance = None

def __call__(cls, *args, **kwargs):

if cls.instance is None:

cls.instance = super(SingletonType, cls).__call__(*args, **kwargs)

return cls.instance

class MyClass:

__metaclass__ = SingletonType

if __name__ == '__main__':

#print dir(MyClass)

ob1 = MyClass()

ob2 = MyClass()

print id(ob1), id(ob2)

#print dir(Singleton)

s1 = Singleton()

s2 = Singleton()

print id(s1), s1.spam()

print id(s2), s2.spam()

QThread::Priority

QThread QObject.thread (self)

Returns the thread in which the object lives.

See also moveToThread().


enum QThread::Priority

This enum type indicates how the operating system should schedule newly created threads.

ConstantValueDescription
QThread::IdlePriority0scheduled only when no other threads are running.
QThread::LowestPriority1scheduled less often than LowPriority.
QThread::LowPriority2scheduled less often than NormalPriority.
QThread::NormalPriority3the default priority of the operating system.
QThread::HighPriority4scheduled more often than NormalPriority.
QThread::HighestPriority5scheduled more often than HighPriority.
QThread::TimeCriticalPriority6scheduled as often as possible.
QThread::InheritPriority7use the same priority as the creating thread. This is the default.

单纯的通过线程解决不了假死问题是, 可以试着调整一下优先级.

Monday, May 21, 2007

QRegExp.indexIn

int QRegExp.indexIn (self, QString str, int offset = 0, CaretMode caretMode = QRegExp.CaretAtZero)

Attempts to find a match in str from position offset (0 by default). If offset is -1, the search starts at the last character; if -2, at the next to last character; etc.

Returns the position of the first match, or -1 if there was no match.

The caretMode parameter can be used to instruct whether ^ should match at index 0 or at offset.

You might prefer to use QString.indexOf(), QString.contains(), or even QStringList.filter(). To replace matches use QString.replace().

Example:

 QString str = "offsets: 1.23 .50 71.00 6.00";
QRegExp rx("\\d*\\.\\d+"); // primitive floating point matching
int count = 0;
int pos = 0;
while ((pos = rx.indexIn(str, pos)) != -1) {
++count;
pos += rx.matchedLength();
}
// pos will be 9, 14, 18 and finally 24; count will end up as 4

Thursday, May 17, 2007

QEvent::Type

Member Type Documentation

enum QEvent::Type

This enum type defines the valid event types in Qt. The event types and the specialized classes for each type are as follows:

ConstantValueDescription
QEvent::None0Not an event.
QEvent::AccessibilityDescription130Used to query accessibility description texts (QAccessibleEvent).
QEvent::AccessibilityHelp119Used to query accessibility help texts (QAccessibleEvent).
QEvent::AccessibilityPrepare86Accessibility information is requested.
QEvent::ActionAdded114A new action has been added (QActionEvent).
QEvent::ActionChanged113An action has been changed (QActionEvent).
QEvent::ActionRemoved115An action has been removed (QActionEvent).
QEvent::ActivationChange99A widget's top-level window activation state has changed.
QEvent::ApplicationActivated121The application has been made available to the user.
QEvent::ApplicationDeactivated122The application has been suspended, and is unavailable to the user.
QEvent::ApplicationFontChange36The default application font has changed.
QEvent::ApplicationLayoutDirectionChange37The default application layout direction has changed.
QEvent::ApplicationPaletteChange38The default application palette has changed.
QEvent::ApplicationWindowIconChange35The application's icon has changed.
QEvent::ChildAdded68An object gets a child (QChildEvent).
QEvent::ChildPolished69A widget child gets polished (QChildEvent).
QEvent::ChildRemoved71An object loses a child (QChildEvent).
QEvent::Clipboard40The clipboard contents have changed (QClipboardEvent).
QEvent::Close19Widget was closed (QCloseEvent).
QEvent::ContextMenu82Context popup menu (QContextMenuEvent).
QEvent::DeferredDelete52The object will be deleted after it has cleaned up.
QEvent::DragEnter60The cursor enters a widget during a drag and drop operation (QDragEnterEvent).
QEvent::DragLeave62The cursor leaves a widget during a drag and drop operation (QDragLeaveEvent).
QEvent::DragMove61A drag and drop operation is in progress (QDragMoveEvent).
QEvent::Drop63A drag and drop operation is completed (QDropEvent).
QEvent::EnabledChange98Widget's enabled state has changed.
QEvent::Enter10Mouse enters widget's boundaries.
QEvent::EnterEditFocus150An editor widget gains focus for editing.
QEvent::EnterWhatsThisMode124Send to toplevel widgets when the application enters "What's This?" mode.
QEvent::FileOpen116File open request (QFileOpenEvent).
QEvent::FocusIn8Widget gains keyboard focus (QFocusEvent).
QEvent::FocusOut9Widget loses keyboard focus (QFocusEvent).
QEvent::FontChange97Widget's font has changed.
QEvent::GraphicsSceneContextMenu159Context popup menu over a graphics scene (QGraphicsSceneContextMenuEvent).
QEvent::GraphicsSceneDragEnter164The cursor enters a graphics scene during a drag and drop operation.
QEvent::GraphicsSceneDragLeave166The cursor leaves a graphics scene during a drag and drop operation.
QEvent::GraphicsSceneDragMove165A drag and drop operation is in progress over a scene.
QEvent::GraphicsSceneDrop167A drag and drop operation is completed over a scene.
QEvent::GraphicsSceneHelp163The user requests help for a graphics scene (QHelpEvent).
QEvent::GraphicsSceneHoverEnter160The mouse cursor enters a hover item in a graphics scene (QGraphicsSceneHoverEvent).
QEvent::GraphicsSceneHoverLeave162The mouse cursor leaves a hover item in a graphics scene (QGraphicsSceneHoverEvent).
QEvent::GraphicsSceneHoverMove161The mouse cursor moves inside a hover item in a graphics scene (QGraphicsSceneHoverEvent).
QEvent::GraphicsSceneMouseDoubleClick158Mouse press again (double click) in a graphics scene (QGraphicsSceneMouseEvent).
QEvent::GraphicsSceneMouseMove155Move mouse in a graphics scene (QGraphicsSceneMouseEvent).
QEvent::GraphicsSceneMousePress156Mouse press in a graphics scene (QGraphicsSceneMouseEvent).
QEvent::GraphicsSceneMouseRelease157Mouse release in a graphics scene (QGraphicsSceneMouseEvent).
QEvent::GraphicsSceneWheel168Mouse wheel rolled in a graphics scene (QGraphicsSceneWheelEvent).
QEvent::Hide18Widget was hidden (QHideEvent).
QEvent::HideToParent27A child widget has been hidden.
QEvent::HoverEnter127The mouse cursor enters a hover widget (QHoverEvent).
QEvent::HoverLeave128The mouse cursor leaves a hover widget (QHoverEvent).
QEvent::HoverMove129The mouse cursor moves inside a hover widget (QHoverEvent).
QEvent::IconDrag96The main icon of a window has been dragged away (QIconDragEvent).
QEvent::IconTextChange101Widget's icon text has been changed.
QEvent::InputMethod83An input method is being used (QInputMethodEvent).
QEvent::KeyPress6Key press (QKeyEvent).
QEvent::KeyRelease7Key release (QKeyEvent).
QEvent::LanguageChange89The application translation changed.
QEvent::LayoutDirectionChange90The direction of layouts changed.
QEvent::LayoutRequest76Widget layout needs to be redone.
QEvent::Leave11Mouse leaves widget's boundaries.
QEvent::LeaveEditFocus151An editor widget loses focus for editing.
QEvent::LeaveWhatsThisMode125Send to toplevel widgets when the application leaves "What's This?" mode.
QEvent::LocaleChange88The system locale has changed.
QEvent::MenubarUpdated153The window's menu bar has been updated.
QEvent::MetaCall43An asynchronous method invocation via QMetaObject::invokeMethod().
QEvent::ModifiedChange102Widgets modification state has been changed.
QEvent::MouseButtonDblClick4Mouse press again (QMouseEvent).
QEvent::MouseButtonPress2Mouse press (QMouseEvent).
QEvent::MouseButtonRelease3Mouse release (QMouseEvent).
QEvent::MouseMove5Mouse move (QMouseEvent).
QEvent::MouseTrackingChange109The mouse tracking state has changed.
QEvent::Move13Widget's position changed (QMoveEvent).
QEvent::Paint12Screen update necessary (QPaintEvent).
QEvent::PaletteChange39Palette of the widget changed.
QEvent::ParentAboutToChange131The widget parent is about to change.
QEvent::ParentChange21The widget parent has changed.
QEvent::Polish75The widget is polished.
QEvent::PolishRequest74The widget should be polished.
QEvent::QueryWhatsThis123The widget should accept the event if it has "What's This?" help.
QEvent::Resize14Widget's size changed (QResizeEvent).
QEvent::Shortcut117Key press in child for shortcut key handling (QShortcutEvent).
QEvent::ShortcutOverride51Key press in child, for overriding shortcut key handling (QKeyEvent).
QEvent::Show17Widget was shown on screen (QShowEvent).
QEvent::ShowToParent26A child widget has been shown.
QEvent::SockAct50Socket activated, used to implement QSocketNotifier.
QEvent::StatusTip112A status tip is requested (QStatusTipEvent).
QEvent::StyleChange100Widget's style has been changed.
QEvent::TabletMove87Wacom tablet move (QTabletEvent).
QEvent::TabletPress92Wacom tablet press (QTabletEvent).
QEvent::TabletRelease93Wacom tablet release (QTabletEvent).
QEvent::TabletEnterProximity171Wacom tablet enter proximity event (QTabletEvent), sent to QApplication.
QEvent::TabletLeaveProximity172Wacom tablet leave proximity event (QTabletEvent), sent to QApplication.
QEvent::Timer1Regular timer events (QTimerEvent).
QEvent::ToolBarChange120The toolbar button is toggled on Mac OS X.
QEvent::ToolTip110A tooltip was requested (QHelpEvent).
QEvent::UpdateLater78The widget should be queued to be repainted at a later time.
QEvent::UpdateRequest77The widget should be repainted.
QEvent::WhatsThis111The widget should reveal "What's This?" help (QHelpEvent).
QEvent::WhatsThisClicked118A link in a widget's "What's This?" help was clicked.
QEvent::Wheel31Mouse wheel rolled (QWheelEvent).
QEvent::WinEventAct132A Windows-specific activation event has occurred.
QEvent::WindowActivate24Window was activated.
QEvent::WindowBlocked103The window is blocked by a modal dialog.
QEvent::WindowDeactivate25Window was deactivated.
QEvent::WindowIconChange34The window's icon has changed.
QEvent::WindowStateChange105The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).
QEvent::WindowTitleChange33The window title has changed.
QEvent::WindowUnblocked104The window is unblocked after a modal dialog exited.
QEvent::ZOrderChange126The widget's z-order has changed. This event is never sent to top level windows.
QEvent::KeyboardLayoutChange169The keyboard layout has changed.
QEvent::DynamicPropertyChange170A dynamic property was added, changed or removed from the object.

User events should have values between User and MaxUser:

ConstantValueDescription
QEvent::User1000User-defined event.
QEvent::MaxUser65535Last user event ID.

Qt::Key

enum Qt::Key

The key names used by Qt.

ConstantValueDescription
Qt::Key_Escape0x01000000
Qt::Key_Tab0x01000001
Qt::Key_Backtab0x01000002
Qt::Key_Backspace0x01000003
Qt::Key_Return0x01000004
Qt::Key_Enter0x01000005
Qt::Key_Insert0x01000006
Qt::Key_Delete0x01000007
Qt::Key_Pause0x01000008
Qt::Key_Print0x01000009
Qt::Key_SysReq0x0100000a
Qt::Key_Clear0x0100000b
Qt::Key_Home0x01000010
Qt::Key_End0x01000011
Qt::Key_Left0x01000012
Qt::Key_Up0x01000013
Qt::Key_Right0x01000014
Qt::Key_Down0x01000015
Qt::Key_PageUp0x01000016
Qt::Key_PageDown0x01000017
Qt::Key_Shift0x01000020
Qt::Key_Control0x01000021On Mac OS X, this corresponds to the Command keys.
Qt::Key_Meta0x01000022On Mac OS X, this corresponds to the Control keys.
Qt::Key_Alt0x01000023
Qt::Key_AltGr0x01001103
Qt::Key_CapsLock0x01000024
Qt::Key_NumLock0x01000025
Qt::Key_ScrollLock0x01000026
Qt::Key_F10x01000030
Qt::Key_F20x01000031
Qt::Key_F30x01000032
Qt::Key_F40x01000033
Qt::Key_F50x01000034
Qt::Key_F60x01000035
Qt::Key_F70x01000036
Qt::Key_F80x01000037
Qt::Key_F90x01000038
Qt::Key_F100x01000039
Qt::Key_F110x0100003a
Qt::Key_F120x0100003b
Qt::Key_F130x0100003c
Qt::Key_F140x0100003d
Qt::Key_F150x0100003e
Qt::Key_F160x0100003f
Qt::Key_F170x01000040
Qt::Key_F180x01000041
Qt::Key_F190x01000042
Qt::Key_F200x01000043
Qt::Key_F210x01000044
Qt::Key_F220x01000045
Qt::Key_F230x01000046
Qt::Key_F240x01000047
Qt::Key_F250x01000048
Qt::Key_F260x01000049
Qt::Key_F270x0100004a
Qt::Key_F280x0100004b
Qt::Key_F290x0100004c
Qt::Key_F300x0100004d
Qt::Key_F310x0100004e
Qt::Key_F320x0100004f
Qt::Key_F330x01000050
Qt::Key_F340x01000051
Qt::Key_F350x01000052
Qt::Key_Super_L0x01000053
Qt::Key_Super_R0x01000054
Qt::Key_Menu0x01000055
Qt::Key_Hyper_L0x01000056
Qt::Key_Hyper_R0x01000057
Qt::Key_Help0x01000058
Qt::Key_Direction_L0x01000059
Qt::Key_Direction_R0x01000060
Qt::Key_Space0x20
Qt::Key_AnyKey_Space
Qt::Key_Exclam0x21
Qt::Key_QuoteDbl0x22
Qt::Key_NumberSign0x23
Qt::Key_Dollar0x24
Qt::Key_Percent0x25
Qt::Key_Ampersand0x26
Qt::Key_Apostrophe0x27
Qt::Key_ParenLeft0x28
Qt::Key_ParenRight0x29
Qt::Key_Asterisk0x2a
Qt::Key_Plus0x2b
Qt::Key_Comma0x2c
Qt::Key_Minus0x2d
Qt::Key_Period0x2e
Qt::Key_Slash0x2f
Qt::Key_00x30
Qt::Key_10x31
Qt::Key_20x32
Qt::Key_30x33
Qt::Key_40x34
Qt::Key_50x35
Qt::Key_60x36
Qt::Key_70x37
Qt::Key_80x38
Qt::Key_90x39
Qt::Key_Colon0x3a
Qt::Key_Semicolon0x3b
Qt::Key_Less0x3c
Qt::Key_Equal0x3d
Qt::Key_Greater0x3e
Qt::Key_Question0x3f
Qt::Key_At0x40
Qt::Key_A0x41
Qt::Key_B0x42
Qt::Key_C0x43
Qt::Key_D0x44
Qt::Key_E0x45
Qt::Key_F0x46
Qt::Key_G0x47
Qt::Key_H0x48
Qt::Key_I0x49
Qt::Key_J0x4a
Qt::Key_K0x4b
Qt::Key_L0x4c
Qt::Key_M0x4d
Qt::Key_N0x4e
Qt::Key_O0x4f
Qt::Key_P0x50
Qt::Key_Q0x51
Qt::Key_R0x52
Qt::Key_S0x53
Qt::Key_T0x54
Qt::Key_U0x55
Qt::Key_V0x56
Qt::Key_W0x57
Qt::Key_X0x58
Qt::Key_Y0x59
Qt::Key_Z0x5a
Qt::Key_BracketLeft0x5b
Qt::Key_Backslash0x5c
Qt::Key_BracketRight0x5d
Qt::Key_AsciiCircum0x5e
Qt::Key_Underscore0x5f
Qt::Key_QuoteLeft0x60
Qt::Key_BraceLeft0x7b
Qt::Key_Bar0x7c
Qt::Key_BraceRight0x7d
Qt::Key_AsciiTilde0x7e
Qt::Key_nobreakspace0x0a0
Qt::Key_exclamdown0x0a1
Qt::Key_cent0x0a2
Qt::Key_sterling0x0a3
Qt::Key_currency0x0a4
Qt::Key_yen0x0a5
Qt::Key_brokenbar0x0a6
Qt::Key_section0x0a7
Qt::Key_diaeresis0x0a8
Qt::Key_copyright0x0a9
Qt::Key_ordfeminine0x0aa
Qt::Key_guillemotleft0x0ab
Qt::Key_notsign0x0ac
Qt::Key_hyphen0x0ad
Qt::Key_registered0x0ae
Qt::Key_macron0x0af
Qt::Key_degree0x0b0
Qt::Key_plusminus0x0b1
Qt::Key_twosuperior0x0b2
Qt::Key_threesuperior0x0b3
Qt::Key_acute0x0b4
Qt::Key_mu0x0b5
Qt::Key_paragraph0x0b6
Qt::Key_periodcentered0x0b7
Qt::Key_cedilla0x0b8
Qt::Key_onesuperior0x0b9
Qt::Key_masculine0x0ba
Qt::Key_guillemotright0x0bb
Qt::Key_onequarter0x0bc
Qt::Key_onehalf0x0bd
Qt::Key_threequarters0x0be
Qt::Key_questiondown0x0bf
Qt::Key_Agrave0x0c0
Qt::Key_Aacute0x0c1
Qt::Key_Acircumflex0x0c2
Qt::Key_Atilde0x0c3
Qt::Key_Adiaeresis0x0c4
Qt::Key_Aring0x0c5
Qt::Key_AE0x0c6
Qt::Key_Ccedilla0x0c7
Qt::Key_Egrave0x0c8
Qt::Key_Eacute0x0c9
Qt::Key_Ecircumflex0x0ca
Qt::Key_Ediaeresis0x0cb
Qt::Key_Igrave0x0cc
Qt::Key_Iacute0x0cd
Qt::Key_Icircumflex0x0ce
Qt::Key_Idiaeresis0x0cf
Qt::Key_ETH0x0d0
Qt::Key_Ntilde0x0d1
Qt::Key_Ograve0x0d2
Qt::Key_Oacute0x0d3
Qt::Key_Ocircumflex0x0d4
Qt::Key_Otilde0x0d5
Qt::Key_Odiaeresis0x0d6
Qt::Key_multiply0x0d7
Qt::Key_Ooblique0x0d8
Qt::Key_Ugrave0x0d9
Qt::Key_Uacute0x0da
Qt::Key_Ucircumflex0x0db
Qt::Key_Udiaeresis0x0dc
Qt::Key_Yacute0x0dd
Qt::Key_THORN0x0de
Qt::Key_ssharp0x0df
Qt::Key_division0x0f7
Qt::Key_ydiaeresis0x0ff
Qt::Key_Multi_key0x01001120
Qt::Key_Codeinput0x01001137
Qt::Key_SingleCandidate0x0100113c
Qt::Key_MultipleCandidate0x0100113d
Qt::Key_PreviousCandidate0x0100113e
Qt::Key_Mode_switch0x0100117e
Qt::Key_Kanji0x01001121
Qt::Key_Muhenkan0x01001122
Qt::Key_Henkan0x01001123
Qt::Key_Romaji0x01001124
Qt::Key_Hiragana0x01001125
Qt::Key_Katakana0x01001126
Qt::Key_Hiragana_Katakana0x01001127
Qt::Key_Zenkaku0x01001128
Qt::Key_Hankaku0x01001129
Qt::Key_Zenkaku_Hankaku0x0100112a
Qt::Key_Touroku0x0100112b
Qt::Key_Massyo0x0100112c
Qt::Key_Kana_Lock0x0100112d
Qt::Key_Kana_Shift0x0100112e
Qt::Key_Eisu_Shift0x0100112f
Qt::Key_Eisu_toggle0x01001130
Qt::Key_Hangul0x01001131
Qt::Key_Hangul_Start0x01001132
Qt::Key_Hangul_End0x01001133
Qt::Key_Hangul_Hanja0x01001134
Qt::Key_Hangul_Jamo0x01001135
Qt::Key_Hangul_Romaja0x01001136
Qt::Key_Hangul_Jeonja0x01001138
Qt::Key_Hangul_Banja0x01001139
Qt::Key_Hangul_PreHanja0x0100113a
Qt::Key_Hangul_PostHanja0x0100113b
Qt::Key_Hangul_Special0x0100113f
Qt::Key_Dead_Grave0x01001250
Qt::Key_Dead_Acute0x01001251
Qt::Key_Dead_Circumflex0x01001252
Qt::Key_Dead_Tilde0x01001253
Qt::Key_Dead_Macron0x01001254
Qt::Key_Dead_Breve0x01001255
Qt::Key_Dead_Abovedot0x01001256
Qt::Key_Dead_Diaeresis0x01001257
Qt::Key_Dead_Abovering0x01001258
Qt::Key_Dead_Doubleacute0x01001259
Qt::Key_Dead_Caron0x0100125a
Qt::Key_Dead_Cedilla0x0100125b
Qt::Key_Dead_Ogonek0x0100125c
Qt::Key_Dead_Iota0x0100125d
Qt::Key_Dead_Voiced_Sound0x0100125e
Qt::Key_Dead_Semivoiced_Sound0x0100125f
Qt::Key_Dead_Belowdot0x01001260
Qt::Key_Dead_Hook0x01001261
Qt::Key_Dead_Horn0x01001262
Qt::Key_Back0x01000061
Qt::Key_Forward0x01000062
Qt::Key_Stop0x01000063
Qt::Key_Refresh0x01000064
Qt::Key_VolumeDown0x01000070
Qt::Key_VolumeMute0x01000071
Qt::Key_VolumeUp0x01000072
Qt::Key_BassBoost0x01000073
Qt::Key_BassUp0x01000074
Qt::Key_BassDown0x01000075
Qt::Key_TrebleUp0x01000076
Qt::Key_TrebleDown0x01000077
Qt::Key_MediaPlay0x01000080
Qt::Key_MediaStop0x01000081
Qt::Key_MediaPrevious0x01000082
Qt::Key_MediaNext0x01000083
Qt::Key_MediaRecord0x01000084
Qt::Key_HomePage0x01000090
Qt::Key_Favorites0x01000091
Qt::Key_Search0x01000092
Qt::Key_Standby0x01000093
Qt::Key_OpenUrl0x01000094
Qt::Key_LaunchMail0x010000a0
Qt::Key_LaunchMedia0x010000a1
Qt::Key_Launch00x010000a2
Qt::Key_Launch10x010000a3
Qt::Key_Launch20x010000a4
Qt::Key_Launch30x010000a5
Qt::Key_Launch40x010000a6
Qt::Key_Launch50x010000a7
Qt::Key_Launch60x010000a8
Qt::Key_Launch70x010000a9
Qt::Key_Launch80x010000aa
Qt::Key_Launch90x010000ab
Qt::Key_LaunchA0x010000ac
Qt::Key_LaunchB0x010000ad
Qt::Key_LaunchC0x010000ae
Qt::Key_LaunchD0x010000af
Qt::Key_LaunchE0x010000b0
Qt::Key_LaunchF0x010000b1
Qt::Key_MediaLast0x0100ffff
Qt::Key_unknown0x01ffffff
Qt::Key_Call0x01100004
Qt::Key_Context10x01100000
Qt::Key_Context20x01100001
Qt::Key_Context30x01100002
Qt::Key_Context40x01100003
Qt::Key_Flip0x01100006
Qt::Key_Hangup0x01100005
Qt::Key_No0x01010002
Qt::Key_Select0x01010000
Qt::Key_Yes0x01010001
Qt::Key_Execute0x01020003
Qt::Key_Printer0x01020002
Qt::Key_Play0x01020005
Qt::Key_Sleep0x01020004
Qt::Key_Zoom0x01020006
Qt::Key_Cancel0x01020001

See also QKeyEvent::key