如何禁用QTextEdit外观

问题描述 投票:1回答:2

在某些时候,我需要让QTextEdit看起来像被禁用。

我不反对调用setEnabled(false),但随后QTextEdit不再接收QContextMenuEvent事件(我需要一个右键单击上下文菜单才能使用....因为这是QTextEdit如何被用户禁用,所以这就是我的方式希望他重新启用它。

所以我这样做:

QColor mainWindowBgColor = palette().color(QPalette::Window);
// for the current widget
setStyleSheet(QString("background-color: %0").arg(mainWindowBgColor.name(QColor::HexRgb)));

这看起来不错,除非您右键单击窗口小部件并显示它的上下文菜单:上下文菜单出现但看起来很糟糕。项目突出显示不起作用,然后几乎看不到所选文本(在灰色背景上涂成白色)。

我怎么能:

  • 调用setEnabled(false)并可以访问右键单击上下文菜单
  • 或使用setStyleSheet但确保它不会被上下文菜单小部件开始绘制
  • 或任何替代....
c++ qt qtextedit
2个回答
1
投票

样式表由所有子窗口小部件继承。要使样式表仅应用于某个窗口小部件(或某种窗口小部件),您必须指定访问者。

EG

setStyleSheet(QString(
    "QTextEdit { background-color: %0 }"
    ).arg(mainWindowBgColor.name(QColor::HexRgb)));

2
投票

我会尝试继承QTextEdit并重写contextMenuEvent。在更改其样式表后,我会显示(exec)标准菜单:

#include <QTextEdit>
#include <QContextMenuEvent>
#include <QMenu>

class TextEdit : public QTextEdit
{
public:
    TextEdit(QWidget* p) : QTextEdit(p){}
protected:
    void contextMenuEvent(QContextMenuEvent * event)
    {
        QMenu * menu = createStandardContextMenu();
        menu->setStyleSheet("background-color: gray");
        menu->exec(QCursor::pos());
    }
};

在上面的示例中,我将菜单背景颜色设置为灰色,但此示例的目标是显示可以覆盖菜单样式表,以防止菜单使用从其父级继承的菜单。

© www.soinside.com 2019 - 2024. All rights reserved.