【问题标题】:Enable and disable paste action启用和禁用粘贴操作
【发布时间】:2015-12-12 15:46:30
【问题描述】:

我将如何启用和禁用粘贴操作,就像 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 的粘贴动作。

谢谢!

【问题讨论】:

  • 你怎么知道你已经清除了剪贴板?
  • 当我清除剪贴板时,QTextEdit 的上下文菜单中的粘贴操作被禁用,而我的继续保持启用状态。

标签: c++ qt


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 2013-07-16
    • 2012-07-02
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多