• 3781阅读
  • 4回复

[提问]问一个关于处理qtextedit右击事件的问题 [复制链接]

上一主题 下一主题
离线zzj198834
 

只看楼主 倒序阅读 楼主  发表于: 2015-06-14
现在想做一个功能,就qtextedit中自定义右击的菜单,不光要实现复制黏贴的菜单功能,还需要得到右击点中的坐标所对应的内容,比说点击到一个图片,可以有办法获取这个图片。
比较类似于聊天软件的点到图片之后的“右击另存为”之类的功能,查了很久也没找到好方法,求各位大牛给点思路,谢谢。
离线zzj198834

只看该作者 1楼 发表于: 2015-06-15
help
离线zzj198834

只看该作者 2楼 发表于: 2015-06-17
help2
离线272064949

只看该作者 3楼 发表于: 2015-06-18
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu); ///<这个可以在ui里设置

    QTextCursor tc = ui->textEdit->textCursor();

    imgMap["desktop"] = qApp->primaryScreen()->grabWindow(0).toImage();
    imgMap["desktop1"] = qApp->primaryScreen()->grabWindow(0, 0, 0, 200, 200).toImage();

    tc.insertText("I am Fyn");
    tc.insertImage(imgMap["desktop"], "desktop");
    tc.insertText("I am Hm");
    tc.insertImage(imgMap["desktop1"], "desktop1");
}

void Widget::on_textEdit_customContextMenuRequested(const QPoint &pos)
{
    QMenu menu;
    menu.move(QCursor::pos());

    connect(menu.addAction("图片另存为"), &QAction::triggered, [=](){
        QTextCursor tc = ui->textEdit->cursorForPosition(pos);
        tc.select(QTextCursor::WordUnderCursor);
        QString str = tc.selection().toHtml();

        int strpos = str.indexOf("img src=");

        if(strpos>=0)
        {
            QString img = str.right(str.size() - strpos);
            char imgname[256] ={0};
            sscanf(img.toStdString().c_str(), "img src=\"%[^\"]", imgname);
            imgMap[imgname].save(QString(imgname)+".jpg");
        }
    });

    menu.exec();
}

一个简单的例子。
离线zzj198834

只看该作者 4楼 发表于: 2015-07-02
回 272064949 的帖子
272064949:Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
....... (2015-06-18 11:25) 

多谢回复,看了你的例子,大概思路是根据cursor选中的内容(也就是图片),转换成html,从而找到图片,但是我试了你的例子:
        QTextCursor tc = ui->textEdit->cursorForPosition(pos);
        tc.select(QTextCursor::WordUnderCursor);
这部分代码并没有选中到图片,导致:
        QString str = tc.selection().toHtml();
  得到的内容是edit中全部内容的html。

请再指教一下,谢谢。
快速回复
限100 字节
 
上一个 下一个