我设法将我的QLineEdit设计成这样的样式:
alt text http://www.kimag.es/share/54278758.png
void Utilities::setFormErrorStyle(QLineEdit *lineEdit)
{
lineEdit->setStyleSheet(
"background-color: #FF8A8A;"
"background-image: url(:/resources/warning.png);"
"background-position: right center;"
"background-repeat: no-repeat;"
"");
}
我使用
调用了函数Utilities *util = new Utilities;
util->setFormErrorStyle(lineNoStaf);
流程应该是这样的:
setFormErrorStyle()
此功能应该可以一遍又一遍地重复使用,但是如何将{strong> QLineEdit 信号(例如textChanged()
)连接到将重置样式表的其他类中的函数,然后断开连接信号,以便每次文本更改时都不会连续运行?
答案 0 :(得分:5)
Qt还允许在其样式表中使用动态属性,这意味着您不需要为表单中的每个窗口小部件类型编写自己的类。
来自http://qt-project.org/doc/qt-4.8/stylesheet-examples.html
使用动态属性进行自定义
在许多情况下,我们需要提供具有必填字段的表单。为了向用户指示该字段是强制性的,一种有效的(尽管是美学上可疑的)解决方案是使用黄色作为那些字段的背景颜色。事实证明,使用Qt样式表很容易实现。首先,我们将使用以下应用程序范围的样式表:
*[mandatoryField="true"] { background-color: yellow }
这意味着其mandatoryField Qt属性设置为true的每个窗口小部件都将具有黄色背景。 然后,对于每个必需字段小部件,我们只需动态创建mandatoryField属性并将其设置为true。例如:
QLineEdit *nameEdit = new QLineEdit(this);
nameEdit->setProperty("mandatoryField", true);
QLineEdit *emailEdit = new QLineEdit(this);
emailEdit->setProperty("mandatoryField", true);
QSpinBox *ageSpinBox = new QSpinBox(this);
ageSpinBox->setProperty("mandatoryField", true);
也可以在Qt 4.3中使用!
答案 1 :(得分:3)
好吧,这不是编译,但原则上应该有效,您应该可以通过调用editWidget->setProperty('isError',true)
或editWidget->setError(false)
class ErrorTextEdit : QLineEdit
{
Q_OBJECT
QPROPERTY(bool isError, READ isError, WRITE setError);
public:
ErrorTextEdit(QWidget* parent) : QLineEdit(parent), m_isError(false)
{
m_styleSheet = "" // see below
setStyleSheet(m_styleSheet);
}
void setError(bool val)
{
if (val != m_isError)
{
m_isError = val;
setStyleSheet(m_styleSheet);
}
}
bool isError() {return m_isError;}
private:
QString m_styleSheet;
bool m_isError;
}
用于样式表
ErrorTextEdit[isError="false"]
{
optional ...
Style for textedit that is NOT an error
}
ErrorTextEdit[isError="true"]
{
background-color: #FF8A8A;
background-image: url(:/resources/warning.png);
background-position: right center;
background-repeat: no-repeat;
}
这个词
[<property>="<value>"]
将样式表的应用限制为<property>
具有相应<value>
的类的实例,唯一需要注意的是,当属性更改其时,样式不已更改'value,因此必须重新应用样式表才能使窗口小部件的外观真正发生变化,请参阅Stylesheet Documentation -> Property Selector
此构造将样式表移动到使用它的窗口小部件中,并使得切换器内部部署到窗口小部件,窗口小部件根据其状态进行更改。
通常,您可以通过多种方式处理表单中的无效输入
a)观察每个更改并适当更新样式,你也应该能够使用QValidator
,但这是一个单独的主题,使用QValidator你可能能够完全内化一个状态单个QTextEdit而不必从外部处理其有效性
b)在上面提到的提交循环中执行此操作,每当用户点击提交时更改正确和错误字段的状态
这一切都取决于您的应用程序和视图的结构
答案 2 :(得分:0)
看,另一个想法是你需要覆盖线条编辑的油漆,然后设置背景图像和颜色。
这里的implimentation是预置here按钮,跟你的行编辑一样