首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QRubberband上实现调整句柄的大小?QSizeGrip是相关的吗?

在QRubberband上实现调整句柄的大小?QSizeGrip是相关的吗?
EN

Stack Overflow用户
提问于 2013-09-28 12:09:45
回答 2查看 4.9K关注 0票数 13

我想使我的QRubberband实例用户可调整大小。我见过这个问题,here,但没有解决办法。

用例是,用户可以在照片上拖动选择框,然后通过拖动QRubberband边距来进行精细调整,以更改几何形状,或者通过拖动所选内容来重新定位现有的几何图形。我已经实现了重新定位,但我想知道如何调整QRubberband的几何形状。

这里可以使用QSizeGrip吗?否则,是否有一种标准的方法来检查Qt中的鼠标边距类型事件,或者其他方法来实现这一点?这是一个研究应用程序,不需要或值得在这个功能上付出很大的努力,但这将是很好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-28 12:48:06

是的,有可能。以下是实现:

标题:

代码语言:javascript
复制
class Resizable_rubber_band : public QWidget {
public:
  Resizable_rubber_band(QWidget* parent = 0);

private:
  QRubberBand* rubberband;
  void resizeEvent(QResizeEvent *);

};

来源:

代码语言:javascript
复制
Resizable_rubber_band::Resizable_rubber_band(QWidget *parent) : QWidget(parent) {
  //tell QSizeGrip to resize this widget instead of top-level window
  setWindowFlags(Qt::SubWindow);
  QHBoxLayout* layout = new QHBoxLayout(this);
  layout->setContentsMargins(0, 0, 0, 0);
  QSizeGrip* grip1 = new QSizeGrip(this);
  QSizeGrip* grip2 = new QSizeGrip(this);
  layout->addWidget(grip1, 0, Qt::AlignLeft | Qt::AlignTop);
  layout->addWidget(grip2, 0, Qt::AlignRight | Qt::AlignBottom);
  rubberband = new QRubberBand(QRubberBand::Rectangle, this);
  rubberband->move(0, 0);
  rubberband->show();
  show();
}

void Resizable_rubber_band::resizeEvent(QResizeEvent *) {
  rubberband->resize(size());
}

用法:(ui->label是用来显示要裁剪的图像的标签)

代码语言:javascript
复制
Resizable_rubber_band* band = new Resizable_rubber_band(ui->label);
band->move(100, 100);
band->resize(50, 50);
band->setMinimumSize(30, 30);

票数 32
EN

Stack Overflow用户

发布于 2017-04-14 20:12:16

如果有其他人在谷歌上游荡,意图在PyQt中使用它,下面是@pavel-strakhov的C++示例的等效Python代码,我可以确认它在*BuntuLinux14.04LTS上与系统一起工作--提供了Python3.4和PyQt 5.2.1。

(请注意,我选择的小部件主题不知道如何在左上角旋转QSizeGrip,因此两个角落都有相同的抓地力。)

资料来源:

代码语言:javascript
复制
class ResizableRubberBand(QWidget):
    """Wrapper to make QRubberBand mouse-resizable using QSizeGrip

    Source: http://stackoverflow.com/a/19067132/435253
    """
    def __init__(self, parent=None):
        super(ResizableRubberBand, self).__init__(parent)

        self.setWindowFlags(Qt.SubWindow)
        self.layout = QHBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.grip1 = QSizeGrip(self)
        self.grip2 = QSizeGrip(self)
        self.layout.addWidget(self.grip1, 0, Qt.AlignLeft | Qt.AlignTop)
        self.layout.addWidget(self.grip2, 0, Qt.AlignRight | Qt.AlignBottom)

        self.rubberband = QRubberBand(QRubberBand.Rectangle, self)
        self.rubberband.move(0, 0)
        self.rubberband.show()
        self.show()

    def resizeEvent(self, event):
        self.rubberband.resize(self.size())

使用:

代码语言:javascript
复制
self.band = ResizableRubberBand(ui.label)
self.band.move(100, 100)
self.band.resize(50, 50)
self.band.setMinimumSize(30, 30)
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19066804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档