Qt是挪威Trolltech公司的旗舰产品,作为跨平台开发框架,是开源KDE桌面的基石
Google Earch,Skype,Opera,Adobe Photoshop Element等著名软件都是基于Qt编写的
和java的”一次编写到处运行”所不同的是,Qt是源代码级的跨平台一次编写到处编译.一次开发的Qt应用程序可以移值到不同平台.目前Qt支持的平台有:Mac,Windows NT/2000/XP/Vista,unix,linux,嵌入式linux
#include
#include "my_win.h"
Int main(int argc,char *argv[])
{
QPEApplication a( argc, argv );
MyWin myWin;
a.setMainWidget(&myWin)
widget.show();
return a.exec();
}
Qt的整个设计都是以单根继承为主这跟java相同.所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类
QObject类后面有三个大的子类分别负责不同的功能它们是:
QApplicaton:类管理图形用户界面应用程序和控制台程序的控制流和主要设置
QWidget:是所有用户界面对象的基类,负责管理图形界面
QLayout:负责管理所有图形界面的摆放方式
Qt体系架构图如下:
Qt应用程序中,首先在main函数中创建QApplication对象,QApplication对象负责图像用户界面应用程序的控制流和主设置,通过调用该对象的exec()函数,进入事件循环处理,对来自窗口系统或其他的事件进行处理和调度,直到收到exit()或quit()结束。对于任何GUI应用,都有一个QApplication实例;对于非GUI应用,应该使用QCoreApplication。
QWidget类是Qt中其他所有用户界面窗口类的基类,包括QComboBox、QDialog, QDialogButtonBox, QDockWidget, QFocusFrame, QFrame, QGLWidget,QGroupBox, QLineEdit、QMainWindow等,它接收鼠标键盘消息,并在屏幕上绘制自己。每个QWidget实例按照Z序显示,子QWidget覆盖父QWidget。没有嵌入到父QWidget的QWidget称为Window(窗体)。通常一个Window包含一个边框和标题栏。
QApplication对象一般要定义一个主widget部件。Widgets是一种控件,也是一种容器,可以包含其他控件,任何widget都可以是任何widget的子对象。
工程文件里包含了qmake建立你的应用程序(或者库,插件)所需要的所有信息。你的工程所需的资源通常通过一系列的声明语句来描述,而简单的控制结构,可以实现在不同的平台和环境下,执行不同的编译流程。
qmake工程文件是以.pro为扩展名
widget类的setGeometry该方法作用是重新设置可视组件的位置。
textInfo = new QLabel(this,"Hello world",0);
textInfo->setGeometry(10, 150, 170, 40);
textInfo->setText(tr("hello world"));
quitBut = new QPushButton(this,"Quit");
quitBut->setGeometry(100,70,90,31);
quitBut->setText(tr("quit"));
这种方式是通过QWidge提供的setGeometry()函数来设置子窗口部件大小和在父窗口的位置
但是绝对位置方式缺点是:如果父窗口大小发生改变,子窗口部件无法做出相应变化
绝对位位置样列如下:
#include
#include
#include
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *widget=new QWidget;
QLabel *label = new QLabel("Hello Qt!“,widget);
label->setGeometry(10,10,20,20);
widget->resize(300,300);
widget->show();
return app.exec();
}
指定子部件在父窗体中所处的位置和大小
void QWidget::setGeometry ( int x, int y, int w, int h )
参数说明: x:表示子部件在父窗体行的位置
y:表示子部件在父窗体列的位置
w:表示子部件宽度
h:表示子部件的高度
void QWidget::show ()//显示widget
void QWidget::hide ()//隐藏widget
bool QWidget::close ()//关闭widget
void QWidget:: resize ( int w, int h )//调整尺寸
void QWidget ::setWindowTitle
void QWidget ::setWindowIcon
调色板类:QPalette
setColor(QPalette::Background,Qt::black); //设置背景色setBrush(QPalette::Background,QBrush(QPixmap("img/mainwindow.png")));//用笔刷设置背景图片
标签类 :QLabel
QLabel ::setPixmap
按钮类:QPushButton
QPushButton ::setIcon
QPushButton :: setIconSize
QPushButton :: setFocusPolicy
编辑框类 :QLineEdit
绝对位置方式/手工布局方式
布局管理方式
QHBoxLayout:水平布局管理器
QVBoxLayout:垂直布局管理器
QGridLayout:网格布局管理器
绝对布局
setLayout函数:通过调用该函数设置窗口的布局模式
setLayout: //设置布局addWidget://添加组件addColSpacing:setSpacing://表示各个控件之间的上下间距
#include
#include
#include
int main(int argc, char *argv[])
{ QApplication app(argc, argv);
QWidget *window = new QWidget;
QPushButton *button1=new QPushButton(“OK”);
QPushButton *button2=new QPushButton(“cancel”);
window->setWindowTitle("Enter Your Age");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
window->setLayout(layout);
window->show();
return app.exec();
}
#include
#include
#include
#include
#include
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("QVBoxLayout");
window->resize(240, 100);
QLCDNumber *lcd = new QLCDNumber;
QObject::connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
QVBoxLayout *layout = new QVBoxLayout(window);
layout->addWidget(lcd);
layout->addWidget(slider);
window->show();
return app.exec();}
#include
#include
#include
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget *wm = new QWidget;
QLabel *label;
QGridLayout *grid = new QGridLayout(wm, 3, 3);
grid->addColSpacing(0, 200);
grid->addColSpacing(1, 100);
label = new QLabel("one", wm);
grid->addWidget(label, 0, 0);
grid->addWidget(new QLabel("two", wm), 1, 0);
label = new QLabel("three", wm);
grid->addWidget(label, 2, 0);
grid->addWidget(new QLabel("four", wm), 1, 1);
label = new QLabel("five", wm);
grid->addWidget(label, 2, 2);
app.setMainWidget(wm);
wm->show();
return app.exec();
}
QDialog类是对话框窗口的基类。对话框窗口是主要用于短期任务以及和用户进行简要通讯的顶级窗口。QDialog可以是模式的也可以是非模式的。QDialog支持扩展性并且可以提供返回值。它们可以有默认按钮。
模式:对话框就是阻塞同一应用程序中其它可视窗口的输入的对话框用户必须完成这个对话框中的交互操作并且关闭了它之后才能访问应用程序中的其它任何窗口
非模式:对话框是和同一个程序中其它窗口操作无关的对话框。在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互。
StandardButton QMessageBox::critical ( QWidget * parent, const QString & caption, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton ) 打开一个标题为caption并且文本为text的严重消息框。这个对话框最多有三个按钮。
int warning ( QWidget * parent, const QString & caption, const QString & text, int button0, int button1, int button2 = 0 )
打开一个标题为caption并且文本为text的警告消息框。这个对话框最多有三个按钮。
StandardButton information( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton )
打开一个标题为caption并且文本为text的信息消息框。这个对话框最多有三个按钮。
QMessageBox类提供了一个有一条简短消息、一个图标和一些按钮的模式对话框。 消息框用于提供情报信息并且问一些简单的问题。
exec函数:调用exec()来显示模式对话框。当用户关闭这个对话框,exec()将提供一个可用的返回值并且这时流程控制继续从调用exec()的地方进行。
accept()槽 :在使用模式对话框,隐藏模式对话框并且设置结果代码为Accepted。
reject ()槽:隐藏模式对话框并且设置结果代码为Rejected。
show() :调用show()来显示非模式对话框. show()立即返回 。
QDialog样列如下:
QFileDialog *dlg = new QFileDialog( workingDirectory, QString::null, 0, 0, TRUE );
dlg->setCaption( QFileDialog::tr( "Open" ) );
dlg->setMode( QFileDialog::ExistingFile );
QString result;
if ( dlg->exec() == QDialog::Accepted )
{
result = dlg->selectedFile();
workingDirectory = dlg->url();
}
delete dlg; return result;