返回介绍

QAccel类

发布于 2019-10-04 14:58:16 字数 8573 浏览 1075 评论 0 收藏 0

QAccel类用来处理键盘的加速键和快捷键。 详情请见……

#include <qaccel.h>

继承了QObject。

所有成员函数的列表。

公有成员

  • QAccel ( QWidget*parent, constchar*name = 0 )
  • QAccel ( QWidget*watch, QObject*parent, constchar*name = 0 )
  • ~QAccel ()
  • bool isEnabled () const
  • void setEnabled ( boolenable )
  • uint count () const
  • int insertItem ( constQKeySequence&key, intid = -1 )
  • void removeItem ( intid )
  • void clear ()
  • QKeySequence key ( intid )
  • int findKey ( constQKeySequence&key ) const
  • bool isItemEnabled ( intid ) const
  • void setItemEnabled ( intid, boolenable )
  • bool connectItem ( intid, constQObject*receiver, constchar*member )
  • bool disconnectItem ( intid, constQObject*receiver, constchar*member )
  • void repairEventFilter ()
  • void setWhatsThis ( intid, constQString&text )
  • QString whatsThis ( intid ) const

信号

  • void activated ( intid )

静态公有成员

  • QKeySequence shortcutKey ( constQString&str )
  • QString keyToString ( QKeySequencek ) (obsolete)
  • QKeySequence stringToKey ( constQString&s ) (obsolete)

保护成员

  • virtual bool eventFilter ( QObject*o, QEvent*e )

详细描

QAccel类用来处理键盘的加速键和快捷键。

键盘加速键是在某个组合键按下的时候出发一个动作,加速键可以处理窗口部件和它子部件里所有的键盘动作所以它不会被键盘焦点所影响。

在大多数情况下,你不需要直接使用这个类。使用QAction类建立的具有加速键的动作可以同时在菜单和工具栏里使用。如果你的兴趣只是在菜单里使用QMenuData::insertItem()或者QMenuData::setAccel()建立只作用在菜单里的加速键。那么许多窗口部件可以自动的生成加速键,比如QButton、QGroupBox、QLabel(使用QLabel::setBuddy())、QMenuBar和QTabBar。实例:

        QPushButton p( "&Exit", parent ); // 自动使用快捷键ALT+Key_E
        QPopupMenu *fileMenu = new fileMenu( parent );
        fileMenu->insertItem( "Undo", parent, SLOT(undo()), CTRL+Key_Z );
    

QAccel包括一个加速键的列表,这个列表里的项目可以使用insertItem()、removeItem()、clear()、key()和findKey()。

每一个加速键项目是由一个标示符和 QKeySequence组成。一个单独的键组是由一个键盘码组合上改变符形成的(SHIFT,CTRL,ALT 或者 UNICODE_ACCEL)。例如,CTRL + Key_p可以作为文本打印的快捷键。这个键的键盘码在qnamespace.h里列出。还有,使用UNICODE_ACCEL可以使字符以统一码(unicode)的形式表现出来。例如 UNICODE_ACCEL + 'A' 所给出的加速键和Key_A是一样的。

当一个加速键被按下的时候,信号 activated()会伴随着这个加速键项目的标示被发出。加速键项目也可以单独的被连接,所以两个不同的键可以在两个不同的槽里被激活(参考 connectItem() 和 disconnectItem())。

使用 setEnabled() 可以允许或禁止所有的的加速键的项目,setItemEnabled() 则可以允许或禁止单独的项目。只有QAccel和这个项目本身被允许的时候,这个项目才可以被激活。

当用户在What's This模式的情况下按下加速键的时候,函数 setWhatsThis() 会提供一个帮助文本。

QAccel对象把键事件发送给包含有parent的 QWidget::topLevelWidget() ,并由此发给这个窗口里的所有子部件。当parent被删除的时候,所有的加速键也同时被删除,然后销毁所有的相关的键事件。

实例:

        QAccel *a = new QAccel( myWindow );        // 在myWindow里建立加速键
        a->connectItem( a->insertItem(Key_P+CTRL), // 添加Ctrl+P加速键
                        myWindow,                  // 连接到myWindow的
                        SLOT(printDoc()) );        // printDoc()槽
    

也可以参考QKeyEvent、QWidget::keyPressEvent()、QMenuData::setAccel()、QButton::accel、QLabel::setBuddy()、QKeySequence、GUI Design Handbook: Keyboard Shortcuts和杂项类。


成员函数文档

QAccel::QAccel ( QWidget*parent, constchar*name = 0 )

通过nameparent构造QAccel的对象。加速键是在parent上操作的。

QAccel::QAccel ( QWidget*watch, QObject*parent, constchar*name = 0 )

构造QAccel对象,这个对象是通过调用name构造的,作用在watch上,是parent的子。

对于一般的程序,这个构造函数是不需要的。

QAccel::~QAccel ()

析构加速键对象并释放所有分配的资源。

void QAccel::activated ( intid ) [信号]

当加速键被按下的时候这个信号产生。id 是个数字,用来表明某个特定的加速键项目。

void QAccel::clear ()

清空所有的加速键项目。

bool QAccel::connectItem ( intid, constQObject*receiver, constchar*member )

把加速键项目的id连接到receivermember槽里。

        a->connectItem( 201, mainView, SLOT(quit()) );
    

当然,你也可以发送一个信号作为 member

也可以参考disconnectItem()。

例子: t14/gamebrd.cpp。

uint QAccel::count () const

返回在这个加速键对象里所有加速键项目的数目。

bool QAccel::disconnectItem ( intid, constQObject*receiver, constchar*member )

通过调用member把使用id标示的加速键项目从receiver里断开。

参考 connectItem()。

bool QAccel::eventFilter ( QObject*o, QEvent*e ) [虚拟 保护]

处理用于顶级部件的加速键事件。e 是产生在对象 o 上的事件。

由 QObject 继承并执行。

int QAccel::findKey ( constQKeySequence&key ) const

返回由键码 key制定的加速键项目的标示,-1表明这个项目没有被找到。

int QAccel::insertItem ( constQKeySequence&key, intid = -1 )

插入加速键项目并返回这个项目的标示符。

key 是键码和混合了SHIFT,CTRL 和 ALT的选项。id 是加速键项目标示符。

如果 id 是负的,那么这个项目就被会被分配一个唯一的小于-1的负标示符。

        QAccel *a = new QAccel( myWindow );        // 在myWindow里建立accels
        a->insertItem( CTRL + Key_p, 200 );        // Ctrl+p, 打印文本
        a->insertItem( ALT + Key_X, 201 );         // Alt+X, 退出
        a->insertItem( UNICODE_ACCEL + 'q', 202 ); // 统一码 'q', 退出
        a->insertItem( Key_D );                    // 得到小于-1的唯一负标示符
        a->insertItem( CTRL + SHIFT + Key_p );     // 得到小于-1的唯一负标示符
  

例子: t14/gamebrd.cpp。

bool QAccel::isEnabled () const

如果加速键被允许激活,返回TRUE,否则FALSE。

参考 setEnabled() 和 isItemEnabled()。

bool QAccel::isItemEnabled ( intid ) const

如果以id表明的这个加速键项目是被允许激活的,返回TRUE,如果是被禁止的或没有找到这个项目,返回FALSE。

参考 setItemEnabled() 和 isEnabled()。

QKeySequence QAccel::key ( intid )

返回以标示符id指明的加速键项目的键组,如果这个标示符没有被找到,返回无效的键组(0)。

QString QAccel::keyToString ( QKeySequencek ) [静态]

这个函数已经不再使用了。 它存在的目的是使以前的源代码还可以工作。我们强烈建议,在新的代码里不要使用它。

建立一个针对于键 k 的加速键字符串。比如,CTRL+Key_O就给出"Ctrl+O"。"Ctrl"等等这一些的字符串(使用 QObject::tr()) 在"QAccel"上下文里被翻译。

这个函数是多余的。把QKeySequence k 进行类型转换成 QString 也可以达到同样的效果。

void QAccel::removeItem ( intid )

去除标示符 id 所标示的加速键项目。

void QAccel::repairEventFilter ()

确信加速键获得正确的事件过滤器。这个函数是自动被调用的,你不应该在应用程序里调用它。

void QAccel::setEnabled ( boolenable )

如果 enable 是TRUE,就把加速键设为允许被激活,如果 enable 是FALSE就禁止它。

单独的键可以通过使用 setItemEnabled() 设置允许或禁止被激活。如果要操作某个键,那么这个键必须在被允许的QAccel里并切实是被允许激活的。

参考 isEnabled() 和 setItemEnabled()。

void QAccel::setItemEnabled ( intid, boolenable )

如果 enable 是TRUE,允许标示符 id 所标示的加速键项目可以被激活。

如果 enable 是FALSE,就禁止这个 id 标示的项目。

如果要操作某项目,那么这个项目必须是被允许的并且存在于一个被运行的QAccel里。

参考 isItemEnabled() 和 isEnabled()。

void QAccel::setWhatsThis ( intid, constQString&text )

id 标示的加速键项目设定What's This帮助文本,这个文本设定给 text

当应用程序处于What's This模式并在用户按下加速键的时候,这个文本显示。

如果要在菜单里设置What's This帮助(不管有没有加速键),使用QMenuData::setWhatsThis().

参考 whatsThis(),QWhatsThis::inWhatsThisMode(),QMenuData::setWhatsThis() 和 QAction::whatsThis。

QKeySequence QAccel::shortcutKey ( constQString&str ) [静态]

返回 str 里的快捷键组,如果 str 没有快捷键组,返回无效的键组(0)。

比如,shortcutKey("E&xit") 返回ALT+Key_X, shortcutKey("&Quit") 返回 ALT+Key_Q 和 shortcutKey("Quit") 返回 0。(在没有继承Qt名字空间类的代码里,你必须像这样写Qt::ALT+Qt::Key_Q.)

我们用英语提供了一个通用加速键列表。在发布这个列表的时候,Microsofu和Open Group并没有表示要推出针对于其他语言的版本

QKeySequence QAccel::stringToKey ( constQString&s ) [静态]

这个函数已不再使用了。 它存在的目的是使以前的源代码还可以工作。我们强烈建议,在新的代码里不要使用它。

返回字符串 s 里里加速键码。例如"Ctrl+O" 给出CTRL+UNICODE_ACCEL+'O'。这些字符串"Ctrl","Shift","Alt"都是被识别的,如同它们在"QAccel"上下文里(使用( QObject::tr()))被翻译过来的意思一样。如果 s 不是被识别的,返回0。

这个函数的典型是使用方法是伴随着 tr()的使用,这样,加速键就可以直接通过翻译被取代。

	      QpopupMenu *file = new QpopupMenu( this );
        file->insertItem( p1, tr("&Open..."), this, SLOT(open()),
        QAccel::stringToKey(tr("Ctrl+O", "File|Open")) );
  

注意"File|Open"的翻译注释,它实际上没有任何的意思,它只是为人工的翻译提供了一个上下文的帮助。

这个函数是多余的,从字符串 s 里构造一个QKeySequence可以达到同样的效果。

参考QObject::tr() 和 Internationalization with Qt。

例子:i18n/mywidget.cpp。

QString QAccel::whatsThis ( intid ) const

返回某个特定项目 id 的What's This 帮助文本或者如果没有文本被提供的时候,返回 QString::null

参考setWhatsThis()。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文