Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
如何设置QScrollArea的初始大小? 我知道这是一个非常具体的C++和QT相关的问题,但是也许有人能帮助我,无论如何……_C++_Qt_Scroll_Widget - Fatal编程技术网

如何设置QScrollArea的初始大小? 我知道这是一个非常具体的C++和QT相关的问题,但是也许有人能帮助我,无论如何……

如何设置QScrollArea的初始大小? 我知道这是一个非常具体的C++和QT相关的问题,但是也许有人能帮助我,无论如何……,c++,qt,scroll,widget,C++,Qt,Scroll,Widget,请参阅下面的代码:我想在滚动区域内显示图像。滚动区域的视图端口应具有规定的初始尺寸。这意味着,如果图像的大小大于视图端口的初始大小,滚动条将可见,否则不可见 // create label for displaying an image QImage image( ":/test.png" ); QLabel *label = new QLabel( this ); label->setPixmap( image.toPixmap() ); // put label into scrol

请参阅下面的代码:我想在滚动区域内显示图像。滚动区域的视图端口应具有规定的初始尺寸。这意味着,如果图像的大小大于视图端口的初始大小,滚动条将可见,否则不可见

// create label for displaying an image
QImage image( ":/test.png" );
QLabel *label = new QLabel( this );
label->setPixmap( image.toPixmap() );

// put label into scroll area
QScollArea *area = new QScrollArea( this );
area->setWidget( label );

// set the initial size of the view port
// NOTE: This is what I'd like to do, but this method does not exist :(
area->setViewPortSize( QSize( 300, 300 ) );
应能够调整整个应用程序的大小,以便查看端口获得比初始端口更大的尺寸

不幸的是,我无法找到如何设置视图端口的大小。Qt的布局机制似乎为视图端口设置了默认大小,但到目前为止,我无法更改它。使用设置新尺寸

area->setMinimumSize( QSize( 300, 300 ) );
将实际设置所需的大小,但随后滚动区域将无法将大小调整为小于300x300的大小


有什么想法吗?

我认为你不太容易做到这一点,也就是说(如果我阅读正确的话),调整小部件的大小,使其内部面积为300x300。不过,您可能可以对其进行篡改,因为滚动区域是一种框架类型,它继承自QWidget。这意味着您可以只调用
区域->调整大小(300+fudge,300+fudge)
,其中,您的fudge值占框架图形占用的额外位

但是,我不确定这是否适用于动态调整大小的对话框。我从来没有做过这样的事。

你可以试试:

class MyScrollArea : public QScrollArea
{
    virtual QSize sizeHint() const { return QSize( 300, 300 ); }
};

// create label for displaying an image
QImage image( ":/test.png" );
Label *label = new QLabel;
label->setPixmap( image.toPixmap() );

// put label into scroll area
QScollArea *area = new MyScrollArea( this );
area->setWidget( label );
然而,布局和Qt是令人惊讶的巫毒。这是它最不实用的部分


如果这不起作用,请尝试在各种小部件上调用QWidget::resize()。

我认为您对问题的看法是错误的。QScrollArea只是一个小部件,您可以将它放在一个框架或qmain窗口中。小部件的大小由包含它的小部件的布局控制


看看Trolltech的这个例子:

如果您试图在滚动区域内显示图像,最好的选择不是标签

您应该尝试使用QGraphicsView/qgraphicscene/qgraphicspixmapitem(而不是滚动区域和标签)。显示图像时的性能要好得多。当您使用滚动条四处移动时,滚动区域和标签将很难重新绘制图像

例如,您有一个“.ui”文件,在gui上有一个名为“qgvImageView”的QGraphicsView和一个名为“image”的QImage

查看QT文档。顺便说一句:这是在Qt4.2中引入的


我不确定这是否能解决问题,但QGraphicsView有可能对您尝试执行的操作做出更好的反应。

滚动区域是顶级小部件吗?如果是的话,打电话就可以了

area->resize(300,300);
如果它位于层次结构中,则需要适当调整顶层的大小(复杂),或设置区域的最小大小。您还可以尝试使用LayoutPolicy-假设sizeHint为QSize(300300),您可以根据中的定义为其提供适当的大小策略

area->setGeometry(int x, int y, int w, int h);
area->setGeometry(int x, int y, int w, int h);