C++ GUI Qt4学习笔记(一)
2015-06-29 15:59
525 查看
这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序。
引入两个重要概念:一个是“信号和槽”,另一个是“布局”。
窗口部件(widget)是用户界面的一个可视化元素,相当于windows系统中的“控件”和“容器”。任意窗口部件都可以用作窗口。
1.1 Hello Qt
正确安装Qt4开发环境,创建工程目录hello,源代码文件名为hello.cpp,进入hello目录
#include <QApplication>
#include <QLabel>
int main(int argc,char * argv[])
{
QApplicationapp(argc,argv); //创建一个QApplication的对象,用来管理应用程序所用到的资源,这个QApplication需要两个参数,分别是argc,argv,因为qt支持它自己的一些命令行参数。
QLabel*label = new QLabel("helloword,i am ghostyu"); //创建一个label窗口部件,不用多说,c++执行new操作,在堆中创建的label指针,注意程序中的*label最后并为通过delete销毁,程序退出后,由操作系统收回堆内存。
label->show(); //调用显示方法。
returnapp.exec(); //将应用程序的控制权传递给qt,此时,程序会进入时间循环状态,这是一种等待模式,等待用户的动作。
}
(1)#qmake -project
生成一个与平台无关的项目文件hello.pro
(2)#qmake hello.pro
生成一个与平台相关的makefile文件
(3)#make
构建改程序
linux下运行该程序
#./hello
2.建立连接,响应用户的动作(将用户事件与窗口部件建立联系,以相应用户动作)
Qt的窗口部件通过发射信号(signal)来表明一个用户动作已经发生了或者是一个状态已经改变了。信号可以与槽(slot)相连接,以便在发射信号时,槽可以得到自动执行。
SIGNAL()和SLOT()是Qt语法中的一部分。
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc,char *argv[])
{
QApplicationapp(argc,argv);
QPushButton*button = new QPushButton("quit"); <span style="font-size:16px">//注意一定要有后面的new QPushButton</span>
QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit())); <span style="font-size:16px">//QObject::connect(发送者,什么信号,接受者,怎么办)</span>
button->show();
returnapp.exec();
}注意:QObject::connect()里接受者对象前面加采用引用&app
3.窗口部件的布局
布局(layout)
QHBoxlayout 从左到右水平排列
QVBoxLayout 从上到下竖直排列
QGridLayout 把各个窗口排列在一个网格里
Qt程序员最常使用的构建用户接口的方法是先声明所需的窗口部件,然后再设置它们所对应具备的属性,然后把这些窗口不见添加到布局中,布局会自动设置它们的位置和大小。利用Qt的信号和槽机理,并通过窗口部件之间的连接就可以管理用户的交互行为。
#include <QApplication>
#include <QHBoxLayout>
#include <qslider.h> //滑动条
#include <qspinbox.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("enter your age");
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider( Qt::Horizontal );
spinBox->setRange(0, 130);
slider->setRange(0, 130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
spinBox->setValue( 35 );
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return a.exec();
}
Project 3:控件使用
#include <QApplication>
#include <QSlider> // 滑动条
#include <QSpinBox> //旋转盒
#include <QHBoxLayout> //水平排列
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QWidget *par=new QWidget;//声明一个QWidget作窗口
par->setWindowTitle("Enter Your Age");//设置窗口的标题
QSlider *slider=new QSlider;//声明一个滑动条
QSpinBox *spinBox=new QSpinBox;//声明一个旋转盒
slider->setRange(0,100);//设置滑动条的范围
spinBox->setRange(0,100);//设置旋转盒的取值范围
QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));//滑动条值变化引起旋转盒值的变化
QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));//旋转盒值的变化引起滑动条值的变化 ,这里的两个就不用加& 因为没有本质改变这两个控件
spinBox->setValue(35);//初始一个spinBox的值
//布置一下控件格局layout
QHBoxLayout *layout=new QHBoxLayout;//声明一个布局
layout->addWidget(spinBox);//把两个控件加到格局中
layout->addWidget(slider);//格局有了,把窗口的格局设置成这个
par->setLayout(layout);
par->show();
return app.exec();
}
//细节总结:QWidget类->setWindowTitle("blabla");QWidget类->setLayout(某layout类成员);
声明。触发事件的连接QObject::connect(); 声明横向的QSlider slider=new slider(Qt::Horizontal)
新遇到的类:QHBoxLayout横向排列; QVBoxLayout垂直排列;QGridLayout按矩阵方式排列
虽然我们还没有看见spinBox 和slider 控件的大小和位置,它们已经水平排列好了。
QHBoxLayout 能合理安排它们。我们不用在程序中考虑控件在屏幕上的大小和位置这些头
疼的事情了,交给布局管理器就万事大吉。
在Qt 中建立用户界面就是这样简单灵活。程序员的任务就是实例化所需要的控件,按
照需要设置它们的属性,把它们放到布局管理器中。界面中要完成任务由Qt 的signal 和
slot 完成。
4.Qt参考文档
Qt Assistant
UNIX下在终端输入assistant命令,通过继承得到的函数的文档会显示在它的基类中。
引入两个重要概念:一个是“信号和槽”,另一个是“布局”。
窗口部件(widget)是用户界面的一个可视化元素,相当于windows系统中的“控件”和“容器”。任意窗口部件都可以用作窗口。
1.1 Hello Qt
正确安装Qt4开发环境,创建工程目录hello,源代码文件名为hello.cpp,进入hello目录
#include <QApplication>
#include <QLabel>
int main(int argc,char * argv[])
{
QApplicationapp(argc,argv); //创建一个QApplication的对象,用来管理应用程序所用到的资源,这个QApplication需要两个参数,分别是argc,argv,因为qt支持它自己的一些命令行参数。
QLabel*label = new QLabel("helloword,i am ghostyu"); //创建一个label窗口部件,不用多说,c++执行new操作,在堆中创建的label指针,注意程序中的*label最后并为通过delete销毁,程序退出后,由操作系统收回堆内存。
label->show(); //调用显示方法。
returnapp.exec(); //将应用程序的控制权传递给qt,此时,程序会进入时间循环状态,这是一种等待模式,等待用户的动作。
}
(1)#qmake -project
生成一个与平台无关的项目文件hello.pro
(2)#qmake hello.pro
生成一个与平台相关的makefile文件
(3)#make
构建改程序
linux下运行该程序
#./hello
2.建立连接,响应用户的动作(将用户事件与窗口部件建立联系,以相应用户动作)
Qt的窗口部件通过发射信号(signal)来表明一个用户动作已经发生了或者是一个状态已经改变了。信号可以与槽(slot)相连接,以便在发射信号时,槽可以得到自动执行。
SIGNAL()和SLOT()是Qt语法中的一部分。
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc,char *argv[])
{
QApplicationapp(argc,argv);
QPushButton*button = new QPushButton("quit"); <span style="font-size:16px">//注意一定要有后面的new QPushButton</span>
QObject::connect(button,SIGNAL(clicked()),&app,SLOT(quit())); <span style="font-size:16px">//QObject::connect(发送者,什么信号,接受者,怎么办)</span>
button->show();
returnapp.exec();
}注意:QObject::connect()里接受者对象前面加采用引用&app
3.窗口部件的布局
布局(layout)
QHBoxlayout 从左到右水平排列
QVBoxLayout 从上到下竖直排列
QGridLayout 把各个窗口排列在一个网格里
Qt程序员最常使用的构建用户接口的方法是先声明所需的窗口部件,然后再设置它们所对应具备的属性,然后把这些窗口不见添加到布局中,布局会自动设置它们的位置和大小。利用Qt的信号和槽机理,并通过窗口部件之间的连接就可以管理用户的交互行为。
#include <QApplication>
#include <QHBoxLayout>
#include <qslider.h> //滑动条
#include <qspinbox.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("enter your age");
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider( Qt::Horizontal );
spinBox->setRange(0, 130);
slider->setRange(0, 130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
spinBox->setValue( 35 );
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return a.exec();
}
Project 3:控件使用
#include <QApplication>
#include <QSlider> // 滑动条
#include <QSpinBox> //旋转盒
#include <QHBoxLayout> //水平排列
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
QWidget *par=new QWidget;//声明一个QWidget作窗口
par->setWindowTitle("Enter Your Age");//设置窗口的标题
QSlider *slider=new QSlider;//声明一个滑动条
QSpinBox *spinBox=new QSpinBox;//声明一个旋转盒
slider->setRange(0,100);//设置滑动条的范围
spinBox->setRange(0,100);//设置旋转盒的取值范围
QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));//滑动条值变化引起旋转盒值的变化
QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));//旋转盒值的变化引起滑动条值的变化 ,这里的两个就不用加& 因为没有本质改变这两个控件
spinBox->setValue(35);//初始一个spinBox的值
//布置一下控件格局layout
QHBoxLayout *layout=new QHBoxLayout;//声明一个布局
layout->addWidget(spinBox);//把两个控件加到格局中
layout->addWidget(slider);//格局有了,把窗口的格局设置成这个
par->setLayout(layout);
par->show();
return app.exec();
}
//细节总结:QWidget类->setWindowTitle("blabla");QWidget类->setLayout(某layout类成员);
声明。触发事件的连接QObject::connect(); 声明横向的QSlider slider=new slider(Qt::Horizontal)
新遇到的类:QHBoxLayout横向排列; QVBoxLayout垂直排列;QGridLayout按矩阵方式排列
虽然我们还没有看见spinBox 和slider 控件的大小和位置,它们已经水平排列好了。
QHBoxLayout 能合理安排它们。我们不用在程序中考虑控件在屏幕上的大小和位置这些头
疼的事情了,交给布局管理器就万事大吉。
在Qt 中建立用户界面就是这样简单灵活。程序员的任务就是实例化所需要的控件,按
照需要设置它们的属性,把它们放到布局管理器中。界面中要完成任务由Qt 的signal 和
slot 完成。
4.Qt参考文档
Qt Assistant
UNIX下在终端输入assistant命令,通过继承得到的函数的文档会显示在它的基类中。
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- PostgreSQL新手入门教程
- Ajax PHP简单入门教程代码
- Nodejs学习笔记之入门篇
- jQuery入门 构造函数
- jQuery入门介绍之基础知识
- jquery 指南/入门基础
- JDBCTM 指南:入门
- JSP入门教程(4)
- Qt定时器和随机数详解
- JSP入门教程(3)
- C#语言初级入门介绍
- JSP入门教程(1)
- JSP入门教程(2)
- JavaScript入门学习书籍推荐
- Linux 入门常用命令 password ― 修改密码,改变用户
- 安全检测Unix和Linux服务器安全设置入门精讲
- System.Web.Routing入门及进阶
- System.Web.Routing入门及进阶