启用和禁用粘贴操作

时间:2015-12-12 15:46:30

标签: c++ qt

如何启用和禁用粘贴操作,就像QTextEdit的上下文菜单粘贴操作一样?所以当剪贴板有东西时,应该启用粘贴按钮,当我清除剪贴板时,应该禁用粘贴按钮。然而,这并没有发生在我创建的行动中。

这是我到目前为止所做的:

TextEditor::TextEditor(QWidget *parent) :
    ...
{
    ...
    connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(processPaste()));
    ....
}

    void TextEditor::processPaste()
{
    if (const QMimeData *md = QApplication::clipboard()->mimeData())
            ui->actionPaste->setEnabled(md->hasText());
}

当程序启动并且剪贴板为空时,操作被禁用就像预期的那样,当我复制动作启用的内容时,再次就像预期的那样但当我清除剪贴板时,粘贴操作仍然应该被禁用比如QTextMenu的粘贴动作。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您应该采用不同的方式,而不是等待更改的信号,将您的插槽连接到菜单的aboutToShow信号。然后检查剪贴板的状态。这样,当菜单即将显示时,您的代码将被调用,您可以相应地更新操作的状态。

另请注意,如果您的应用程序未处于活动状态,则OS X剪贴板的dataChanged()信号中的Qt doc mentions将无效。不依赖于此的另一个原因。