zoukankan      html  css  js  c++  java
  • QT学习6:组装丰富的积木!

    #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布局就失败了。

  • 相关阅读:
    iOS APP上线流程
    iOS开发:cocoapods的使用
    Swift:函数和闭包
    OC中单例的各种写法及基本讲解
    iOS:死锁
    iOS传值方式:属性,代理,block,单例,通知
    iOS支付
    Binary Tree Preorder Traversal——经典算法的迭代求解(前序,中序,后序都在这里了)
    Largest Number——STL的深层理解
    const、volatile、mutable的用法
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693571.html
Copyright © 2011-2022 走看看