C++ Qt电子邮件输入小部件

C++ Qt电子邮件输入小部件,c++,qt,C++,Qt,我想输入电子邮件小部件,如谷歌电子邮件或其他电子邮件服务。 如果我输入spase、标签上的上一个文本或其他图标。 如何使用标准的Qt小部件实现这一点 我尝试使用QListWidget,设置iconmode,并将最后一项设置为最后一个元素QLineEdit。如果我设置了listmode,QLineEdit显示,如果iconmode-not。 我怎样才能做到 qhbl = new QHBoxLayout(); qlw = new QListWidget(); qlw->setViewMode

我想输入电子邮件小部件,如谷歌电子邮件或其他电子邮件服务。

如果我输入spase、标签上的上一个文本或其他图标。 如何使用标准的Qt小部件实现这一点

我尝试使用
QListWidget
,设置iconmode,并将最后一项设置为最后一个元素
QLineEdit
。如果我设置了listmode,
QLineEdit
显示,如果iconmode-not。 我怎样才能做到

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);
你可以用。它看起来不像你的照片那么好看,但效果又好又快

解决您的问题的简单示例:

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);
    }
}

这是我输入简单邮件时的工作。您只需要更复杂的正则表达式验证器。

我会选择一个,或者简单的QHBoxLayout,其中最后一项是
QLineEdit
或类似的。一旦你接受了一个电子邮件地址,你就在QLineEdit之前添加了一个自定义的小部件。这样的小部件不是现成的。你需要一些聪明的逻辑。@peppe你是什么意思?Qt中没有这样的小部件。也许KDE中有一个,尝试在他们的框架中搜索。否则,你需要自己编写一个,通过一个行编辑、一个流布局、一个用于“已获得”电子邮件地址的自定义小部件的巧妙组合。不,这不是个好主意,因为我想要一个类似于电子邮件服务的输入字符串。这意味着,如果我的地址列表中的电子邮件更改为姓名(例如)。处理
textChanged()
信号和在连接的插槽中使用
QRegExp
很容易。