输入:基本代码。使用QPushButtons
创建包含在QWidget
中的25个QVBoxLayout
,其中QWidget
本身是顶级QVBoxLayout的唯一子项,用于处理我们顶部的小部件展示位置{ {1}}。第二个scroll_area_test-QWidget
包装可能听起来多余,但稍后会派上用场。
QWidget
这很好用。它产生一个窗口,上面有25个按钮。鉴于我的显示分辨率足够高,我可以看到完整的窗口。一切都花花公子。
但是等等,如果用户的分辨率低于我自己的分辨率怎么办?窗户太大,无法放在屏幕上!唉,这种情况有一个解决方案。输入:#include <QVBoxLayout>
#include <QScrollArea>
#include <QWidget>
#include <QPushButton>
#include <QApplication>
/*
* This declaration actually lives in its own header file,
* but for simplicity's sake this code includes it here directly.
*/
class scroll_area_test : public QWidget {
Q_OBJECT
public:
scroll_area_test ();
};
scroll_area_test::scroll_area_test () {
QVBoxLayout *top_layout = new QVBoxLayout (this);
QWidget *contents = new QWidget (this);
top_layout->addWidget (contents);
QVBoxLayout* inner_layout = new QVBoxLayout (contents);
for (size_t i = 0; i < 25; ++i) {
QPushButton *tmp_button = new QPushButton (this);
inner_layout->addWidget (tmp_button);
}
}
int main (int argc, char **argv) {
QApplication app (argc, argv);
scroll_area_test widget;
widget.show();
return (app.exec ());
}
。
QScrollArea
我希望这不会改变我系统上的布局,因为有足够的空间来显示所有小部件。
然而,这是新的输出:
我做错了什么?我希望滚动区域自动调整为其子级的大小(因此scroll_area_test::scroll_area_test () {
QVBoxLayout *top_layout = new QVBoxLayout (this);
QScrollArea *scrolling_area = new QScrollArea (this);
scrolling_area->setWidgetResizable (true);
scrolling_area->setFocusPolicy (Qt::NoFocus);
top_layout->addWidget (scrolling_area);
QWidget *contents = new QWidget (this);
//contents->setSizePolicy (QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
QVBoxLayout* inner_layout = new QVBoxLayout (contents);
//inner_layout->setSizeConstraint (QLayout::SetMinimumSize);
for (size_t i = 0; i < 25; ++i) {
QPushButton *tmp_button = new QPushButton (this);
inner_layout->addWidget (tmp_button);
}
scrolling_area->setWidget (contents);
}
),以最大窗口大小为限。这似乎不是这种情况。包含小部件的大小没有被正确考虑,因此滚动区域是a。)高度应该比它应该更小,b。)宽度大于应该的大小,两者都与没有包裹的外观相比setWidgetResizable (true)
中的QWidget
。
我已经玩过尺码限制和政策(通过注释掉的代码显示),但这些并没有在视觉上改变任何东西。
N.B。:我在一个更复杂的情况下遇到了这个问题,但是能够将它抽象为这个例子。
答案 0 :(得分:0)
您需要为QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
scrolling_area->setSizePolicy(sizePolicy);
对象设置尺寸政策。
设置策略水平和垂直固定,如下所述。
start = new Date(2017,9,14)
end = new Date(2017,9,24)
var days = (end - start)/(1000*60*60*24)// 10 days just for example, you already have this number
var daysOfWeek = [0,0,0,0,0,0,0]// array to hold results
for(var i = 0; i < days;i++){
x = start.getDay();
daysOfWeek[x] += 1;
start = addDays(start,1);
}
console.log(daysOfWeek)
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}