Bas*_*Ben 8 user-interface qt menu copy-paste
问候,
对于我的一个应用程序,我正在尝试实现"编辑"菜单.此菜单通常具有标准条目撤消,剪切,复制和粘贴.
默认情况下,此菜单不存在,用户似乎特别希望在Mac OS X上使用它.
有没有更简单的方法来实现这一点,而不是手动在每个小部件中这样做?由于大多数小部件都具有已通过快捷方式实现的复制/粘贴/撤消机制,因此我想提供一些简单的菜单操作来调用它们.
这些动作应该调用任何具有焦点的小部件,然后他们应该将事件向上传递给对象链,我猜.
我在Windows,Linux和Mac OS X上使用Qt 4.6.
谢谢!
小智 6
完成一半必要的功能很容易.只需在主窗口类中创建"编辑"菜单以及必要的QAction(复制/粘贴/撤消/等),然后将它们连接到插槽.在插槽中,模拟正确的按键和释放事件(例如,Ctrl + C for Copy)并将它们发送到当前聚焦的小部件.在代码中,这样的事情:
MainWindow::MainWindow(...)
{
    ...
    connect( actionCopy, SIGNAL( triggered()), SLOT( copy()));
    ...
}
...
void MainWindow::copy()
{
    QWidget* focused = QApplication::focusWidget();
    if( focused != 0 )
    {
        QApplication::postEvent( focused,
                                 new QKeyEvent( QEvent::KeyPress,
                                                Qt::Key_C,
                                                Qt::ControlModifier ));
        QApplication::postEvent( focused,
                                 new QKeyEvent( QEvent::KeyRelease,
                                                Qt::Key_C,
                                                Qt::ControlModifier ));
}
当然,这是一个非常黑客.您需要修改每个目标平台的代码,将键盘快捷方式更改为正确的代码,并且可能会发生接收焦点的小部件使用Ctrl + C执行某些安静意外操作.在我看来,这种方法最糟糕的缺点是你无法正确控制编辑菜单项的启用状态.无法从通用窗口小部件查询是否可以进行复制或粘贴操作.
我无法找到这个问题的真正解决方案 - 并且会惊讶地发现存在这个问题 - 因为复制/粘贴功能通常隐藏在类的代码中,而不是通过任何标准的信号/插槽集来暴露.在今晚使用该功能进行实验后,我决定忘记从我的应用程序中获取编辑菜单,并期望用户知道键盘快捷键,或使用上下文相关菜单.
| 归档时间: | 
 | 
| 查看次数: | 2754 次 | 
| 最近记录: |