• QT学习7:1个事物领导另一个


     LCDRange.h

    #ifndef LCDRANGE_H_
    #define LCDRANGE_H_
    
    #include <QWidget.h>
    
    class QSlider;
    
    class LCDRange:public QWidget
    {
    	Q_OBJECT
    public:
    	LCDRange(QWidget* parent=NULL, const char *name=NULL);
    	int value() const;
    
    public slots:
    	void setValue(int);
     
    signals://信号只声明,不能定义.
    	void valueChanged(int);
    	
    private:
    	QSlider       *slider;
    
    
    };
    
    
    #endif//LCDRANGE_H_
    


    LCDRange.cpp

    #include "LCDRange.h"
    #include <QSlider.h>
    #include <QLCDNumber.h>
    #include <QVBoxLayout>
    
    LCDRange::LCDRange(QWidget* parent, const char *name)
    :QWidget(parent, name)
    {
    	QLCDNumber *lcd = new QLCDNumber(2, this);
    	slider = new QSlider(Qt::Orientation::Horizontal, this);
    	slider->setRange(0, 99);
    	slider->setValue(0);
    
    
    	//别把display(int)写成Display(int)了,不然不会响应的,而且你就算写成display1,
    	//编译器也不会报错,只是不响应
    	//
    	connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
    
    	//信号-->类的信号-->
    	connect(slider, SIGNAL(valueChanged(int)), SIGNAL(valueChanged(int)));
    
    	QVBoxLayout *vlayout = new QVBoxLayout;
    	vlayout->addWidget(lcd);
    	vlayout->addWidget(slider);
    
    	setLayout(vlayout);
    }
    
    int LCDRange::value() const
    {
    	return slider->value();
    }
    
    void LCDRange::setValue(int value)
    {
    	slider->setValue(value);
    }
    
    


    main

    #include "qtlesson.h"
    #include <QtGui/QApplication>
    #include <QPushButton.h>
    #include <QFont.h>
    #include <QVBoxLayout>
    #include <QGridLayout>
    #include "LCDRange.h"
    
    class MyWidget : public QWidget
    {
    public:
    	MyWidget(QWidget *parent=NULL, const char *name=NULL);
    };
    
    MyWidget::MyWidget(QWidget* parent, const char *name)
    {
    	QPushButton *quit = new QPushButton("Quit", this);
    	quit->setFont(QFont(("Times"), 18, QFont::Bold));
    
    	connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
        
    	QVBoxLayout *vlayout = new QVBoxLayout;
    
    	//QGridLayout,这里和列有关,比如(6,12),因为才12个,那就网格成一行了,
    	QGridLayout *grid = new QGridLayout(6, 12);
    
    	LCDRange *previous = 0;
    	for (int r=0; r<3; r++)
    	{
    		for (int c=0; c<4; c++)
    		{
    			LCDRange *lr = new LCDRange(this);
    			if (previous)
    			{
    				connect(lr, SIGNAL(valueChanged(int)), previous, SLOT(setValue(int)));
    			}
    
    			grid->addWidget(lr);
    			previous = lr;
    		}
    	}
    
    	vlayout->addWidget(quit);
    	vlayout->addLayout(grid);
    	
    	setLayout(vlayout);
    }
    
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	MyWidget w;
    	a.setMainWidget(&w);
    	w.show();
    	
    	return a.exec();
    }
    


    1.QGridLayout,和列有关,比如(6,12),因为才12个,那就网格成一行了,

    2.信号只声明,不能定义.一定义就提示错误

    3.信号的调用可以通过emit valueChanged(xx)这样被其他调用

    4.connect好像不做代码检查的,也就是无论SIGNAL()和 SLOT()中填的是不是已存在的函数,它都认为OK,编译通过

  • 相关阅读:
    [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
    CENTOS7 SYSTEMD SERVICE 将自己的程序放入自动启动的系统服务
    CentOS7 关闭selinux
    面试总结TODO
    很好用的 UI 调试技巧
    点满 webpack 技能点,让你的打包速度提效 90%
    前端缓存最佳实践
    Fiddler抓包工具总结
    按钮粒子效果
    如何优雅的在 vue 中添加权限控制
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693570.html
Copyright © 2020-2023  润新知