点击按钮,关闭程序 ;移动滑动条lcd数字显示框显示数值,文本显示数值;
基于qt5;
//cannon.h
#ifndef CANNON_H
#define CANNON_H
#include
class CannonField:public QWidget
{
Q_OBJECT
public:
CannonField(QWidget *parent = 0);
int showAngle() const{return angle;}//显示角度值
public slots:
void setAngle(int degrees);//接受信号:设置角度值
signals:
void angleChanged(int);//发送信号:角度值变化
protected:
void paintEvent(QPaintEvent *);//窗口刷新/重绘
private:
int angle;//角度值
};
#endif // CANNON_H
//lcdrange.h
#ifndef LCDRANGE_H
#define LCDRANGE_H
#include
#include
class QSlider;
class LCDRange:public QWidget
{
Q_OBJECT
public:
LCDRange(QWidget *parent = 0);
int showValue() const;//查询滑块的值
public slots:
void setValue(int);//设置滑块的值
void setRange(int minVal, int maxVal);//设置滑块的范围
signals:
void valueChanged(int);
private:
QSlider *slider;
};
#endif // LCDRANGE_H
//cannon.cpp
#include "cannon.h"
#include
//实现构造函数CannonField;
CannonField::CannonField(QWidget *parent):QWidget(parent)
{
angle=45;
//设置窗体自动填充背景
setAutoFillBackground(true);
//设置当前窗口调色板颜色
setPalette(QPalette(QColor(250,250,200)));
}
//角度值设置函数;
void CannonField::setAngle(int degrees)
{
//限制输入角度范围5~70;
if(degrees<5)
degrees = 5;
if(degrees>70)
degrees = 70;
if(angle == degrees)
//如果角度与初始angle相同,返回
return;
//若不同,将angle设置为输入角度
angle=degrees;
//调用绘画函数
repaint();
//发送angle变化消息
emit angleChanged(angle);
}
//文本编辑函数;
void CannonField::paintEvent(QPaintEvent *)
{
//创建文本
QString s = "Angle = "+QString::number(angle);
//创建操作窗口部件的QPaonter
QPainter p(this);
//在(200,200)处绘制文本s
p.drawText(200, 200, s);
}
//lcdrange.cpp
#include "lcdrange.h"
#include
//滑动条的声明和调用; #include
//lcd数字显示框类的声明和调用; //实现构造函数LCDRange;
LCDRange::LCDRange(QWidget *parent):QWidget(parent)
{
//声明一个新的lcd数字显示框名称为lcd;
QLCDNumber *lcd = new QLCDNumber;
//定义lcd数字显示框显位数为2位;
lcd->setDigitCount(2);
//声明一个新的滑动条名称位slider;
slider = new QSlider;
//定义滑动条为水平滑动;
slider->setOrientation(Qt::Horizontal);
//定义滑动条slider数值范围为0~99;
slider->setRange(0,99);
//定义滑动条slider当前位置为0;
slider->setValue(0);
//连接信号和槽:当滑动条slider位置发生变化时,将滑动条slider的数值在lcd数字显示框lcd上显示;
QObject::connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));
//连接信号和槽:当滑动条slider位置发生变化时,将滑动条slider的数值显示在文本上;
QObject::connect(slider,SIGNAL(valueChanged(int)),SIGNAL(valueChanged(int)));
//设置这个窗口部件的焦点为slider
setFocusProxy(slider);
//声明一个新的垂直分布控件名称为part;
QVBoxLayout *part = new QVBoxLayout;
//将lcd数字显示框lcd添加到垂直分布控件part中;
part->addWidget(lcd);
//将滑动条slider添加到垂直分布控件part中;
part->addWidget(slider);
//定义当前页面布局为垂直分布布局layout;
setLayout(part);
}
//滑动条数值设置函数;
void LCDRange::setValue(int value)
{
//定义滑动条slider当前数值为value;
slider->setValue(value);
}
//滑动块数值范围函数;
void LCDRange::setRange(int minVal, int maxVal)
{
//当最小值小于0或者最大值大于99或者最小值大于最大值时;
if(minVal<0||maxVal>99||minVal>maxVal)
{
qWarning("LCDRange::setRange(%d,%d)\n"
"\tRange must be 0..99\n"
"\tand minVal must not be greater than maxVal", minVal, maxVal);
return;
}
//定义滑动条slider数值范围为minVal~maxVal;
slider->setRange(minVal,maxVal);
}
//main.cpp
#include
#include
//按钮类的声明和调用; #include
//字体类的声明和调用; #include
//滑动条类的声明和调用; #include
//lcd数字显示框的声明和调用; #include
//垂直分布控件的声明和调用; #include
//栅格分布控件的声明和调用; #include "lcdrange.h"
#include "cannon.h"
//声明一个新的类MyWidget继承QWidget;
class MyWidget:public QWidget
{
public:
//继承QWidget的构造函数类MyWidget;
MyWidget(QWidget *parent=0);
};
//实现构造函数MyWidget;
MyWidget::MyWidget(QWidget *parent):QWidget(parent)
{
//声明一个新的按钮名称为quit;
QPushButton *quit=new QPushButton;
//定义按钮quit文本名称为quit;
quit->setText("quit");
//定义按钮quit文本字体为Times,字号为18,加粗;
quit->setFont(QFont("Times",18,QFont::Bold));
//连接信号和槽:当按钮quit被按下时,关闭所有窗口;
QObject::connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));
//声明一个新的LCDRange名称为lcdRange;
LCDRange *lcdRange=new LCDRange;
//定义lcdRange的取值范围为5~70;
lcdRange->setRange(5,70);
//声明一个新的CannonField名称为cannonField;
CannonField *cannonField=new CannonField;
//连接信号和槽:当lcdRange位置发生变化,执行setAngle函数;
QObject::connect(lcdRange,SIGNAL(valueChanged(int)),cannonField,SLOT(setAngle(int)));
//连接信号和槽:当cannonField发生改变时,将数值显示在lcdRange上面;
QObject::connect(cannonField,SIGNAL(angleChanged(int)),lcdRange,SLOT(setValue(int)));
//声明一个新的栅格布局控件名称为grid;
QGridLayout *grid=new QGridLayout;
//将quit添加到栅格布局控件grid中位置为0行0列;
grid->addWidget(quit,0,0);
//将lcdRange添加的栅格布局控件grid中位置为1行0列,并在顶部显示;
grid->addWidget(lcdRange,1,0,Qt::AlignTop);
//将cannonField添加到栅格布局控件grid中位置为1行1列;
grid->addWidget(cannonField,1,1);
//定义栅格分布控件grid行列伸缩控件为
grid->setColumnStretch(1,10);
//定义lcdRange设置数值为60;
lcdRange->setValue(60);
//对lcdRange窗口设置键盘焦点
lcdRange->setFocus();
//声明一个新的垂直分布控件名称为layout;
QVBoxLayout *layout=new QVBoxLayout;
//将栅格分布控件grid添加到垂直分布控件layout中;
layout->addLayout(grid);
//设置窗口为垂直分布控件layout显示;
setLayout(layout);
}
//主函数
int main(int argc,char *argv[])
{
//创建并且处理这些命令行变量;
QApplication a(argc, argv);
//声明一个程序窗口名称为"w";
MyWidget w;
//定义窗口w的最小尺寸为长500,宽400;
w.setMinimumSize(QSize(500,400));
//定义窗口w的最大尺寸为长500,宽400;
w.setMaximumSize(QSize(500,400));
//显示"w"窗口;
w.show();
//返回exec;
return a.exec();
}
运行效果
有任何问题请留言,感谢支持;
极限了后面的真的写不出来了,菜了菜了;