Qt:改变控件位置关系QVBoxLayout

骑猪看日落 2022-10-24 11:46 304阅读 0赞

1、如果要改变位置关系,方法1是直接setGeometry,还有一种方法是添加布局控件。

如果不设置两者位置关系,控件都会直接从坐标0, 0开始放置:

95fb21931ef890573686175ea56c2f17a78.jpg

2、添加垂直布局

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QVBoxLayout>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication app(argc, argv);
  9. QWidget w;
  10. QPushButton button; /*按钮是窗口*/
  11. button.setText("Button");
  12. button.setParent(&w); //窗口对象的父子关系:设置父窗口是button
  13. // button.setGeometry(30, 30, 100, 30); //坐标原点在窗口的左上角[不包括工具栏]
  14. QLineEdit edit;
  15. edit.setParent(&w);
  16. QVBoxLayout vLayout;
  17. vLayout.addWidget(&button);
  18. vLayout.addWidget(&edit);
  19. w.setLayout(&vLayout);
  20. w.setWindowTitle("Hello world");
  21. w.show();
  22. return app.exec();
  23. }

7415bbad1befd075682aecc6560fc1ba204.jpg

3、添加水平布局

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QHBoxLayout>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication app(argc, argv);
  9. QWidget w;
  10. QPushButton button; /*按钮是窗口*/
  11. button.setText("Button");
  12. button.setParent(&w); //窗口对象的父子关系:设置父窗口是button
  13. // button.setGeometry(30, 30, 100, 30); //坐标原点在窗口的左上角[不包括工具栏]
  14. QLineEdit edit;
  15. edit.setParent(&w);
  16. QHBoxLayout vLayout;
  17. vLayout.addWidget(&button);
  18. vLayout.addWidget(&edit);
  19. w.setLayout(&vLayout);
  20. w.setWindowTitle("Hello world");
  21. w.show();
  22. return app.exec();
  23. }

2d7c65737c4ff35f5cff979c672965f1.png

关系:窗口里面放置layout——> layout放置控件button和edit——> 这个两个控件会自动根据layout的规则而布局

4、添加弹簧

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QHBoxLayout>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication app(argc, argv);
  9. QWidget w;
  10. QPushButton button; /*按钮是窗口*/
  11. button.setText("Button");
  12. button.setParent(&w); //窗口对象的父子关系:设置父窗口是button
  13. // button.setGeometry(30, 30, 100, 30); //坐标原点在窗口的左上角[不包括工具栏]
  14. QLineEdit edit;
  15. edit.setParent(&w);
  16. QHBoxLayout vLayout;
  17. // vLayout.addStretch(1); //添加弹簧
  18. vLayout.addWidget(&button);
  19. vLayout.addWidget(&edit);
  20. vLayout.addStretch(1);
  21. w.setLayout(&vLayout);
  22. w.setWindowTitle("Hello world");
  23. w.show();
  24. return app.exec();
  25. }

fbd22ac1ae3ffebff452ed102905233b55c.jpg

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QHBoxLayout>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication app(argc, argv);
  9. QWidget w;
  10. QPushButton button; /*按钮是窗口*/
  11. button.setText("Button");
  12. button.setParent(&w); //窗口对象的父子关系:设置父窗口是button
  13. // button.setGeometry(30, 30, 100, 30); //坐标原点在窗口的左上角[不包括工具栏]
  14. QLineEdit edit;
  15. edit.setParent(&w);
  16. QHBoxLayout vLayout;
  17. vLayout.addStretch(1); //添加弹簧
  18. vLayout.addWidget(&button, 1);
  19. vLayout.addWidget(&edit, 1);
  20. vLayout.addStretch(1); //设置弹簧的比重:4分天下
  21. w.setLayout(&vLayout);
  22. w.setWindowTitle("Hello world");
  23. w.show();
  24. return app.exec();
  25. }

e8c0b6f55d23829de2bbb5f84168db3a383.jpg

5、控件之间间隔

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QHBoxLayout>
  6. int main(int argc, char *argv[])
  7. {
  8. QApplication app(argc, argv);
  9. QWidget w;
  10. QPushButton button; /*按钮是窗口*/
  11. button.setText("Button");
  12. QLineEdit edit;
  13. QHBoxLayout vLayout; //有了Layout之后,其父子关系就不需要了,因为会自动构造控件的父子关系
  14. vLayout.addStretch(1); //添加弹簧
  15. vLayout.addWidget(&button, 1); //添加控件窗口到LayOut布局上
  16. vLayout.addSpacing(50); //在两个控件窗口之间添加50个像素作为间隔两个控件
  17. vLayout.addWidget(&edit, 1);
  18. vLayout.addStretch(1); //设置弹簧的比重:4分天下
  19. w.setLayout(&vLayout);
  20. w.setWindowTitle("Hello world");
  21. w.show();
  22. return app.exec();
  23. }

6095f07390393ca85b55ea26c5175b438d3.jpg

6、网格布局

  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QPushButton>
  4. #include <QLineEdit>
  5. #include <QHBoxLayout>
  6. #include <QGridLayout>
  7. int main(int argc, char *argv[])
  8. {
  9. QApplication app(argc, argv);
  10. QWidget w;
  11. QPushButton button; /*按钮是窗口*/
  12. button.setText("0, 0");
  13. QLineEdit edit;
  14. QGridLayout gLayout;
  15. gLayout.setColumnStretch(0, 1); //在第0行放置1根弹簧
  16. gLayout.setRowStretch(3, 1); //在第0列放置1根弹簧
  17. gLayout.addWidget(&button, 0, 1);
  18. gLayout.addWidget(&edit, 0, 2);
  19. gLayout.addWidget(new QPushButton("1, 0"), 1, 1);
  20. gLayout.addWidget(new QPushButton("1, 1"), 1, 2);
  21. gLayout.addWidget(new QPushButton("3, 1"), 2, 1, 1, 2);
  22. w.setLayout(&gLayout);
  23. w.setWindowTitle("Hello world");
  24. w.show();
  25. return app.exec();
  26. }

86e0aa0f3afb93ee13b7ccc2ea008ab50db.jpg

-—

发表评论

表情:
评论列表 (有 0 条评论,304人围观)

还没有评论,来说两句吧...

相关阅读

    相关 QT—QTableWidget

    1、新建QT工程并拖入QTableWidget控件     后面会就“如何搭建QT5和VS2010开发环境”,以及“如何在VS中新建QT工程并编辑界面”做一个专题说明