代码之家  ›  专栏  ›  技术社区  ›  Narek

如何在qtextedit中调整图像的大小?

  •  4
  • Narek  · 技术社区  · 15 年前

    如何单击图像,从其一角按住,并在qtextedit中调整图像的大小?或者至少如何在光标下获取一个被选中的图像以改变宽度和高度?

    2 回复  |  直到 8 年前
        1
  •  5
  •   Community Mohan Dere    8 年前

    以下是我如何实现的:

    void AdvancedTextEdit::resizeImage()
    {
    
        QTextBlock currentBlock = m_textEdit->textCursor().block();
        QTextBlock::iterator it;
    
        for (it = currentBlock.begin(); !(it.atEnd()); ++it)
        {
    
                 QTextFragment fragment = it.fragment();
    
    
    
                 if (fragment.isValid())
                 {
    
                     if(fragment.charFormat().isImageFormat ())
                     {
                          QTextImageFormat newImageFormat = fragment.charFormat().toImageFormat();
    
                          QPair<double, double> size = ResizeImageDialog::getNewSize(this, newImageFormat.width(), newImageFormat.height());
    
                          newImageFormat.setWidth(size.first);
                          newImageFormat.setHeight(size.second);
    
                          if (newImageFormat.isValid())
                          {
                              //QMessageBox::about(this, "Fragment", fragment.text());
                              //newImageFormat.setName(":/icons/text_bold.png");
                              QTextCursor helper = m_textEdit->textCursor();
    
                              helper.setPosition(fragment.position());
                              helper.setPosition(fragment.position() + fragment.length(),
                                                  QTextCursor::KeepAnchor);
                              helper.setCharFormat(newImageFormat);
                          }
                      }
                  }
           }
    }
    

    当然,我也实现了ResizeImageDialog对话框的 getNewSize(this,newImageFormat.width(),newImageFormat.height()); 获取当前图像大小的函数,允许用户更改图像大小,并将新的图像大小作为qpair返回。这并不难。见 here 用于实现对话框。

        2
  •  1
  •   eyllanesc    8 年前

    以上是非常常见的需求,但并不是直接在qt中实现的。在qtextedit中调整图像帧的大小是一个棘手的部分。我用不同的方法。我在qtextedit顶部绘制了一个小部件,作为围绕图像的橡皮筋。为了实现这一点,我做了以下工作:

    1. 我实现了另一个小部件(继承自qwidget),它像虚线框一样绘制自己。如果提供了正确的大小,它将像橡皮筋一样围绕图像绘制自己,并在用户结束调整橡皮筋的大小后为您提供新的图像大小。当然,如果使用橡皮筋小部件的虚拟ResizeEvent(…)函数并发出自己的信号,则在调整橡皮筋的大小期间也可能调整图像的大小。作为橡皮筋小部件的父级,设置qtextedi->viewport()以获得橡皮筋小部件的正确视区位置。