Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QRubberband上实现调整大小句柄?QSizeGrip是否相关?_C++_Qt_Qtwidgets - Fatal编程技术网

C++ 在QRubberband上实现调整大小句柄?QSizeGrip是否相关?

C++ 在QRubberband上实现调整大小句柄?QSizeGrip是否相关?,c++,qt,qtwidgets,C++,Qt,Qtwidgets,我想让我的QRubberband实例用户可以调整大小。我见过这个问题,但没有解决办法 使用情况是,用户可以在照片上拖出选择框,然后通过拖动QRubberband边距来进行微调,以更改几何体,或者通过拖动选择来重新定位现有几何体。我已经实现了重新定位,但我想知道用于更改QRubberband几何体的大小调整手柄 这里可以使用QSizeGrip吗?除此之外,是否有标准方法检查Qt中的页边距内鼠标类型事件,或者其他方法来实现这一点?这是为一个研究应用程序设计的,它不需要或不保证在这一功能上付出很多努力

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

使用情况是,用户可以在照片上拖出选择框,然后通过拖动
QRubberband
边距来进行微调,以更改几何体,或者通过拖动选择来重新定位现有几何体。我已经实现了重新定位,但我想知道用于更改QRubberband几何体的大小调整手柄


这里可以使用QSizeGrip吗?除此之外,是否有标准方法检查
Qt
中的页边距内鼠标类型事件,或者其他方法来实现这一点?这是为一个研究应用程序设计的,它不需要或不保证在这一功能上付出很多努力,但拥有它会很好。

是的,这是可能的。以下是实施方案:

标题:

class Resizable_rubber_band : public QWidget {
public:
  Resizable_rubber_band(QWidget* parent = 0);

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

};
资料来源:

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
是用于显示要裁剪的图像的标签)


< /P> < P>如果有人在谷歌上漫游,意图使用PyQt,这里是等效的Python代码,以@ pavel strakhov的C++示例,我可以确认它对我的工作是在BuntuLinux 14.04 LTS上,系统提供了Python 3.4和PyQT5.2.1../P> (需要注意的是,我选择的小部件主题不知道如何旋转左上角的

QSizeGrip
,因此两个角都有相同的夹点。)

来源:

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())
self.band = ResizableRubberBand(ui.label)
self.band.move(100, 100)
self.band.resize(50, 50)
self.band.setMinimumSize(30, 30)
用法:

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())
self.band = ResizableRubberBand(ui.label)
self.band.move(100, 100)
self.band.resize(50, 50)
self.band.setMinimumSize(30, 30)

看起来不错。太糟糕了,我今天没有可用的选票。谢谢你的投入。看起来很有希望,但我还没开始工作。在一个新的测试Qt应用程序项目中,只有一个QLabel,我看到了rubberband,但仅此而已。我是否需要实现一些隐含的方法?我已经为QLabel启用了捕鼠器跟踪功能。它在一个新的带有Qt5的clean项目中运行良好。完整的项目来源:截图:谢谢你的麻烦。在这里运行您的项目,但仍然没有成功-OSX下的Qt5.1.1。真奇怪。我将rubberband框设置为初始大小/位置,但没有调整大小手柄/没有交互。也许这是OSX上的一个问题。我向那些认为这与向下投票无关的人道歉,但这是我在PyQt中发现的唯一一个与实现这一目标有重大关联的谷歌结果,所以我认为冒着向下投票的风险去帮助其他闲逛的PyQt用户是值得的。