如何禁用QTextEdit外观

时间:2018-04-05 13:15:33

标签: c++ qt qtextedit

在某些时候,我需要让df = df[df['my_col'].notnull()] 看起来像是被禁用了。

我不反对调用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)但请确保它不会被上下文菜单小部件开始绘制
  • 或任何其他....

2 个答案:

答案 0 :(得分: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());
    }
};

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

答案 1 :(得分:1)

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

E.g。

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