#include <QApplication>//在每一个使用QT的应用程序中都必须使用QApplication,它管理了各种 //应用程序的广泛资源,比如默认字体和光标 #include <QPushButton.h>//经典的图形用户界面按钮,QWidget,可以显示一段文本或QPixmap #include <QFont.h>//QT中的字体 #include <QLCDNumber.h>//顾名思义,像LCD一样显示数字的widget吧! #include <QSlider.h>//滑动条 #include <QVBoxLayout>//竖直布局 #include <QGridLayout>//网格布局 class LCDRange:public QWidget { public: LCDRange(QWidget* parent=0, const char *name=0); }; LCDRange::LCDRange(QWidget* parent, const char *name) { //-------------------------------------------------------- // 要显示的位数是2就只能显示到99, // 以后不显示了,是3就只能显示到999, // 而且display变化太快,显示位数太少,比如0-999变化, // 如果设置为1,直接拖动滑动条超出9,可能就一直显示成0了 // -- hgy notes. //-------------------------------------------------------- QLCDNumber *lcd = new QLCDNumber(2, this); //Horizontal:水平 QSlider *slider = new QSlider(Qt::Orientation::Horizontal, this); //设置范围 slider->setRange(0, 99); //设置当前位置 slider->setValue(0); //slider位置的改变值传给lcd的display connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(slider); layout->addWidget(lcd); setLayout(layout); } class MyWidget :public QWidget { public: MyWidget(QWidget* parent=0, const char *name=0); }; MyWidget::MyWidget(QWidget* parent, const char *name) :QWidget(parent, name) { //quit是局部变量,当MyWidget被删除时,默认它也被删除了,所以MyWidget不需要一个析构函数 //当然,你也可以选择去删除它 //QPushButton(const QString &text, QWidget *parent, const char* name); QPushButton *quit = new QPushButton("Quit", this, "quit"); quit->setFont(QFont("Times", 18, QFont::Bold)); //qApp指的就是QApplication的指针。 connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); //下面的会自动扩展,无论我写成6行6列,还是1行一列 //下面都是直接分成3行4列. //不能把NULL写成this,因为它是属于vlayout的,否则就不能 //正常排序.-- hgy notes. QGridLayout *grid = new QGridLayout(NULL, 1, 1); for (int i=0; i<3; i++) { for (int j=0; j<4; j++) { grid->addWidget(new LCDRange(), i, j); } } QVBoxLayout *vlayout = new QVBoxLayout(this); vlayout->addWidget(quit); vlayout->addLayout(grid); setLayout(vlayout); } int main(int argc, char *argv[]) { QApplication a(argc, argv);//argc是命令行变量的数量,argv是数组,C、C++特征 MyWidget w; //设置窗口大小.. //w.setGeometry(100, 100, 200, 200); w.move(100, 100); a.setMainWidget(&w); w.show(); return a.exec();//控制转给QT,在exec中,QT接收并处理用户和系统的事件并把它们传给适当的窗口部件 }
1.QGridLayout会自动扩展和缩小,和初始化构造函数预设好像没什么关系
2.QGridLayout的构造函数对QWidget必须传NULL,因为它是属于QVboxLayout的,如果传this,那么vlayout布局就失败了。