Qt:;“聊天记录”;控制

Qt:;“聊天记录”;控制,qt,Qt,我们一直在使用Qt的WebKit作为聊天历史控件。与skype类似,它列出对话历史记录,突出显示此人的姓名,显示其文本,并允许轻松选择和复制 由于我无法控制的原因,我的应用程序不再允许使用Qt的WebKit。我正在寻找在qt的基本产品中理想地使用控件的替代品(我非常愿意扩展) 显示类似skype的聊天历史记录,包括姓名、文本和时间戳 能够为聊天记录行设置奇偶背景色 可滚动 使用鼠标以自由形式轻松选择文本 动态地添加聊天历史记录行,并滚动到底部显示,以防用户向上滚动 有什么建议吗?你认为我可以使用

我们一直在使用Qt的WebKit作为聊天历史控件。与skype类似,它列出对话历史记录,突出显示此人的姓名,显示其文本,并允许轻松选择和复制

由于我无法控制的原因,我的应用程序不再允许使用Qt的WebKit。我正在寻找在qt的基本产品中理想地使用控件的替代品(我非常愿意扩展)

  • 显示类似skype的聊天历史记录,包括姓名、文本和时间戳
  • 能够为聊天记录行设置奇偶背景色
  • 可滚动
  • 使用鼠标以自由形式轻松选择文本
  • 动态地添加聊天历史记录行,并滚动到底部显示,以防用户向上滚动

  • 有什么建议吗?你认为我可以使用丰富的编辑控件吗?它是否具有只读模式?

    可以使用QTextBrowser+html组合,这允许使用html实现相当高级的格式设置。例如(假设ui->textBrowser为QTextBrowser):

    MainWindow::MainWindow(QWidget*父项)
    :QMainWindow(父级)
    ,ui(新ui::Main窗口)
    {
    用户界面->设置用户界面(此);
    用户界面->文本浏览器->设置HTML(QString());
    在用户1收到消息(“来自用户1的消息”);
    在收到用户2消息(“来自用户2的消息”);
    }
    void main window::on_user1收到消息(const QString&msg)
    {
    ui->textBrowser->append(QString().sprintf(“%s”,msg.toStdString().c_str());
    }
    void main window::on_User2Message_已收到(const QString&msg)
    {
    ui->textBrowser->append(QString().sprintf(“%s”,msg.toStdString().c_str());
    }
    

    以不同颜色打印来自两个用户的消息。接收的_UserXMessage_上的方法最终可能会很复杂,添加用户名、时间戳等…

    我考虑过,但它没有颜色支持,正如我所看到的,是吗?这是一个纯文本的“超文本”浏览器。如果我错了,请纠正我。这是真的,但是,如果你改变字体颜色而不是背景颜色,这难道不够吗?我认为这可以通过使用html或富文本的QTextBrowser来实现……最终使用了QTextBrowser,放弃了我拥有的良好格式。如果你正式回答这个问题,我相信你的回答。谢谢。我对答案进行了一点扩展,以使它对阅读者更完整。不确定这是否是最好的选择,但我认为只要稍加努力,也可以实现相当高级的格式设置。。。
    MainWindow::MainWindow(QWidget *parent)
            : QMainWindow(parent)
            , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->textBrowser->setHtml(QString());
    
        on_User1Message_received("Message from user 1");
        on_User2Message_received("Message from user 2");
    }
    
    void MainWindow::on_User1Message_received(const QString &msg)
    {
        ui->textBrowser->append(QString().sprintf("<font color=\"red\"> %s </font>",msg.toStdString().c_str()));
    }
    
    void MainWindow::on_User2Message_received(const QString &msg)
    {
        ui->textBrowser->append(QString().sprintf("<font color=\"blue\"> %s </font>",msg.toStdString().c_str()));
    }