在某些时候,我需要让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
但确保它不会被上下文菜单小部件开始绘制样式表由所有子窗口小部件继承。要使样式表仅应用于某个窗口小部件(或某种窗口小部件),您必须指定访问者。
EG
setStyleSheet(QString(
"QTextEdit { background-color: %0 }"
).arg(mainWindowBgColor.name(QColor::HexRgb)));
我会尝试继承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());
}
};
在上面的示例中,我将菜单背景颜色设置为灰色,但此示例的目标是显示可以覆盖菜单样式表,以防止菜单使用从其父级继承的菜单。