在QTextEdit中连接复制消息和主消息

时间:2015-07-21 10:03:24

标签: c++ qt

我正在尝试连接我的复制邮件和上一条邮件。换句话说,我想在QTextEdit中的任何地方粘贴新字符串。我可以在字符串的末尾插入它。
这是我的代码:

void MessageDialog::pasteMessage()
{
    QClipboard *clipboard = QApplication::clipboard();
    QString previousMessage = m_messageEdit->toPlainText();
    m_messageEdit->setText(previousMessage+clipboard->text());
}

它只是粘贴在字符串的末尾。

我也读过it,我试过这样的话:

void MessageDialog::pasteMessage()
{
    QClipboard *clipboard = QApplication::clipboard();
    QTextCursor cursor(m_messageEdit->textCursor());
    m_messageEdit->moveCursor (QTextCursor::End);
    m_messageEdit->insertPlainText (clipboard->text());
    m_messageEdit->setTextCursor (cursor);
}

实际上它将它贴在一个新行中,这不是我想要的。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您可以直接访问QTextEdit对象,那么QTextEdit::paste()就是您所需要的。 它从剪贴板检索文本并尝试将其粘贴到当前光标位置。 这是一个小例子。

#include <QApplication>

#include <QMessageBox>

#include <QTextEdit>
#include <QShortcut>

int main( int argc, char ** argv )
{
    QApplication app( argc, argv );

    // create multiline edit
    QTextEdit edit;
    edit.setFixedSize( 200, 100 );

    // create shortcut (different from Ctrl+V)
    QShortcut shortcut( Qt::Key_F4, &edit );

    // connect shortcut signal with text edit slot
    QObject::connect( &shortcut,  &QShortcut::activated,
                      &edit,      &QTextEdit::paste );

    // show edit
    edit.show( );

    app.exec( );

    return 0;
}

如果要从剪贴板粘贴内容,只需按F4。

答案 1 :(得分:0)

试一试:

void MessageDialog::pasteMessage()
{
    QString messageText = m_messageEdit->toPlainText();
    int msg_lng = messageText.length();
    QClipboard *clipboard = QApplication::clipboard();
    int currentPos = m_messageEdit->textCursor().position();
    int r_currentPos = msg_lng - currentPos;
    QString subMessage_one = messageText.left(currentPos);
    QString subMessage_two = messageText.right(r_currentPos);
    m_messageEdit->setText(subMessage_one+clipboard->text()+subMessage_two);
    m_messageEdit->moveCursor (QTextCursor::End);
}