如何启用和禁用粘贴操作,就像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的粘贴动作。
谢谢!
答案 0 :(得分:1)
我认为您应该采用不同的方式,而不是等待更改的信号,将您的插槽连接到菜单的aboutToShow信号。然后检查剪贴板的状态。这样,当菜单即将显示时,您的代码将被调用,您可以相应地更新操作的状态。
另请注意,如果您的应用程序未处于活动状态,则OS X剪贴板的dataChanged()信号中的Qt doc mentions将无效。不依赖于此的另一个原因。