【问题标题】:Concatenate copy message and main message in QTextEdit在 QTextEdit 中连接复制消息和主消息
【发布时间】:2015-07-21 10:03:24
【问题描述】:

我正在尝试连接我的复制消息和上一条消息。换句话说,我想将新字符串粘贴到 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);
}

实际上它是把它粘贴到一个新行中,这不是我想要的。

有什么建议吗?

【问题讨论】:

  • QTextEdit::insertplainText() 将 QString 作为参数。改为m_messageEdit->insertPlainText (clipboard->text());

标签: c++ qt


【解决方案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。

【讨论】:

    【解决方案2】:

    试试看:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2016-08-01
      • 2019-03-31
      相关资源
      最近更新 更多