Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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++ QGridLayout内的方形定制QWidgets内的QScrollara_C++_Qt_Qwidget_Qscrollarea_Qgridlayout - Fatal编程技术网

C++ QGridLayout内的方形定制QWidgets内的QScrollara

C++ QGridLayout内的方形定制QWidgets内的QScrollara,c++,qt,qwidget,qscrollarea,qgridlayout,C++,Qt,Qwidget,Qscrollarea,Qgridlayout,我试图在QGridLayout和QScrollArea中布置一个正方形定制(子类)QWidgets网格 我希望它的工作方式是选择QGridLayout列的数量并创建正确大小的正方形 我已经试着做的是 手动布局/调整QWidgets的大小,但这是草率和缓慢的 将qscrollara::widgetsResized设置为true,这样可以正确调整宽度大小,但不能调整高度,请参见 我已尝试在自定义QWidget派生类中设置QSizePolicy和重写QWidget::heightForWidth以及设

我试图在QGridLayout和QScrollArea中布置一个正方形定制(子类)QWidgets网格

我希望它的工作方式是选择
QGridLayout
列的数量并创建正确大小的正方形

我已经试着做的是

  • 手动布局/调整QWidgets的大小,但这是草率和缓慢的
  • qscrollara::widgetsResized
    设置为true,这样可以正确调整宽度大小,但不能调整高度,请参见
  • 我已尝试在自定义QWidget派生类中设置
    QSizePolicy
    和重写
    QWidget::heightForWidth
    以及设置
    qScrolArea::widgetsResized
    ,如下所示:

    CustomWidget::CustomWidget(…)
    {  
    ...
    QSizePolicy策略(QSizePolicy::首选,QSizePolicy::首选);
    policy.setHeightForWidth(true);
    制定政策(政策);
    }
    ...
    int CustomWidget::heightForWidth(int width)常量
    {
    返回宽度;//平方
    }
    
    但是从未调用
    CustomWidget::heightForWidth

    任何帮助都将不胜感激


    编辑:我已经按照建议做了,我的自定义小部件在一个布局(QGridLayout)中。

    您似乎缺少
    hasHeightForWidth
    实现。以下代码段工作正常:

    class MyWidget : public QTextEdit {
    public:
      MyWidget() {}
      int heightForWidth(int width) const {
        return width;
      }
      bool hasHeightForWidth() const {
        return true;
      }
    };
    //...
    QScrollArea area;
    QWidget* widget = new QWidget();
    QGridLayout* layout = new QGridLayout(widget);
    area.setWidget(widget);
    area.setWidgetResizable(true);
    for(int row = 0; row < 10; row++) {
      for(int column = 0; column < 4; column++) {
        layout->addWidget(new MyWidget(), row, column);
      }
    }
    area.show();
    
    类MyWidget:公共QTextEdit{
    公众:
    MyWidget(){}
    整数高度宽度(整数宽度)常数{
    返回宽度;
    }
    bool hasHeightForWidth()常量{
    返回true;
    }
    };
    //...
    克斯克罗拉区;
    QWidget*widget=新的QWidget();
    QGridLayout*layout=新的QGridLayout(小部件);
    setWidget(widget);
    area.SetWidgetResizeable(真);
    对于(int行=0;行<10;行++){
    for(int列=0;列<4;列++){
    布局->添加小部件(新建MyWidget(),行,列);
    }
    }
    area.show();
    
    可能重复您是否尝试在每个小部件上调用
    setFixedSize
    ?@PavelStrakhov我不想要固定大小,我想要与每个(可变)宽度相同的
    高度。我试图重写
    sizeHints()
    ,但由于我需要在该方法中同时返回宽度和高度,因此该方法不起作用。@m.s.由于我正在按照公认的答案进行操作,因此它不是重复的。我的自定义QWidgets已经在布局中。此外,您可能希望在下次将某个内容标记为重复内容时实际阅读该问题。谢谢