Qt电子邮件输入小部件

时间:2015-07-03 10:36:07

标签: c++ qt

我希望在Google电子邮件或其他电子邮件服务上输入电子邮件小部件。 http://postimg.org/image/7pnb42gyj/

如果我输入spase,以前的文本标签或其他图标。 我如何使用标准Qt小部件来完成这项工作?

我尝试使用QListWidget,设置iconmode和最后一项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);

1 个答案:

答案 0 :(得分:0)

您可以使用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);
    }
}

输入简单邮件时,这对我有用。您只需要更复杂的正则表达式验证器。