我想要像谷歌电子邮件或其他电子邮件服务一样的输入电子邮件小部件。 http://postimg.org/image/7pnb42gyj/
如果我输入 spase、要标记的先前文本或其他图标。 我如何使用标准 Qt 小部件执行此操作?
我尝试使用 QListWidget
来做到这一点,设置图标模式,并将最后一项设置为 QLineEdit
作为最后一个元素。如果我设置 listmode,QLineEdit
显示,如果 iconmode - 不。
我怎样才能做到?
qhbl = new QHBoxLayout();
qlw = new QListWidget();
qlw->setViewMode(QListWidget::IconMode);
qlw->setResizeMode(QListWidget::Adjust);
connect(qlw, SIGNAL(customContextMenuRequested(const QPoint &)),
SLOT(showContextMenuForWidget(const QPoint &)));
qlw->setContextMenuPolicy(Qt::CustomContextMenu);
addNewElement("test111111111");
addNewElement("test222222222");
addNewElement("test3333");
addNewElement("test4444");
QListWidgetItem* qlwiItem = new QListWidgetItem();
qle = new QLineEdit();
qle->setText("input");
connect(qle, SIGNAL(returnPressed()), this, SLOT(addNewElement()));
qle->setFixedWidth(100);
qle->setMinimumWidth(90);
qle->setMaximumWidth(110);
qlw->addItem(qlwiItem);
qlw->setItemWidget(qlwiItem, qle);
qhbl->addWidget(qlw);
ui->centralWidget->setLayout(qhbl);
最佳答案
您可以使用 QSyntaxHighlighter
.它看起来不像您的图片那么漂亮,但运行良好且速度很快。
我解决您问题的简单示例:
void myHiglLight::highlightBlock(const QString &text)
{
QTextCharFormat myClassFormat;
myClassFormat.setFontWeight(QFont::Bold);
myClassFormat.setForeground(Qt::darkMagenta);
myClassFormat.setBackground(Qt::green);
QString pattern = "\\b[a-z]+@[a-z]+\.[a-z][a-z]\\b";
QRegExp expression(pattern);
int index = text.indexOf(expression);
while (index >= 0) {
int length = expression.matchedLength();
setFormat(index, length, myClassFormat);
index = text.indexOf(expression, index + length);
}
}
当输入简单的邮件时,这对我有用。您只需要更复杂的正则表达式验证器。
关于c++ - Qt 电子邮件输入小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31204720/