如何使 QTextEdit 看起来已禁用
How to make a QTextEdit look disabled
在某些时候,我需要让 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
但要确保上下文菜单小部件开始绘制时不会使用它
- 或任何其他选择....
我会尝试继承 QTextEdit
并覆盖 contextMenuEvent
。在那里我会展示(exec)一个标准菜单,在改变它的样式后sheet:
#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());
}
};
在上面的例子中,我将菜单背景颜色设置为灰色,但这个例子的目的是展示一种可以覆盖菜单样式的方法sheet,以防止菜单使用继承自它的 parent.
样式 sheet 被所有 sub-widgets 继承。要使样式 sheet 仅适用于特定小部件(或一种小部件),您必须指定访问器。
例如
setStyleSheet(QString(
"QTextEdit { background-color: %0 }"
).arg(mainWindowBgColor.name(QColor::HexRgb)));
在某些时候,我需要让 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
但要确保上下文菜单小部件开始绘制时不会使用它 - 或任何其他选择....
我会尝试继承 QTextEdit
并覆盖 contextMenuEvent
。在那里我会展示(exec)一个标准菜单,在改变它的样式后sheet:
#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());
}
};
在上面的例子中,我将菜单背景颜色设置为灰色,但这个例子的目的是展示一种可以覆盖菜单样式的方法sheet,以防止菜单使用继承自它的 parent.
样式 sheet 被所有 sub-widgets 继承。要使样式 sheet 仅适用于特定小部件(或一种小部件),您必须指定访问器。
例如
setStyleSheet(QString(
"QTextEdit { background-color: %0 }"
).arg(mainWindowBgColor.name(QColor::HexRgb)));