c++ - 启用和禁用粘贴操作

标签 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 的粘贴操作。

谢谢!

最佳答案

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

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

关于c++ - 启用和禁用粘贴操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241736/

相关文章:

C++ 编程候选函数不可行

c++ - 如何使用递归使用嵌套循环并检查 C++ 中的数字总和

c++ - 你什么时候会使用 std::auto_ptr 而不是 boost::shared_ptr?

c++ - 在 exec() 之前将 quit() 发布到 QEventLoop

c++ - 使用 mingw 交叉编译时缺少库

c++ - 减少(op :var) has the same effect as shared(var)

c++ - 使用QT从dll调用函数

Qt 模型的 TreeView 和表格 View

qt - AVFrame 到 QImage 的高效转换

c++ - 以 n 秒为间隔调用函数 n 次