环境:
Qt Creator 2.8.1
Qt 5.1.1
gcc 4.9.1
我的第一份qt程序
hello wolrd
控制台应用程序
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug()<<"hello world";
return
初识信号槽
建立GUI应用程序,在MainWindow中加入pushbutton,然后使用design进行设计,选择工具edit signals/slots, ,点击pushbutton,在configure connection中选上”show signals and slots inherited from Qwidget”, QPushButton中选择相应的事件,右侧mainwindow选择相应的事件,比如click() – close().
再次运行,单击button,窗口自动关闭。
认识基本的窗口
MainWindow对应QMainWindow
menuBar对应QMenuBar,它的下级是menuWindow,子项是actionWindow。
每一个Object都由一个Class对应。
右击pro图标可以增添新的ui,且对应的.h,.cpp等文件会自动加入文件路径。
右下角的窗体是对象的属性列表。
简单UI程序
设计产生100以内整数的随机数生成器,点击button即可在text中生成一个随机数字。
分析:
在MainWindow中加入textEdit、pushButton。当我们点击pushButton时,slot作出反应,使用srandom()
, rand()生成100的随机整数。
关键代码:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <time.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_random_clicked()
{
srandom(time(0));
int result = (int)((double)rand()/RAND_MAX*100+0.5);
QString str= QString::number(result,10);
ui->textEdit->setText(str);
ui->textEdit->setAlignment(Qt::AlignHCenter);
}
使用空项目创建hello world的窗口程序。
当选择使用空项目进行创建程序后,我们发现整个文件夹只有cpp资源文件和pro配置文件。
初步设想是使用label显示“hello world”,并把label放在QApplication中。
使用帮助我们找到ALable和QApplication,他们的头文件都在/home/edemon/Qt5.1.1/5.1.1/gcc/include/QtWidgets路径下,那么include
SOURCES += \
main.cpp
QT
main.cpp:
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
QLabel *label = new QLabel("hello world.");
label->show();
label->setFixedSize(200,60);
return
执行:
如果不想在头文件书写路径时那么麻烦,可以在pro配置文件中加上QT += core gui declarative
.
在qt creator中查找帮助
grid布局
空项目练习。
pro:
SOURCES += \
main.cpp
QT
main.cpp:
#include <QApplication>
#include <QtGui>
#include <QtCore>
#include <QLabel>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
QWidget *window = new QWidget();
window->setWindowTitle("hello");
QGridLayout *layout = new QGridLayout();
QLabel *label1=new QLabel("name:");
QLineEdit *txt1=new QLineEdit();
QLabel *label2=new QLabel("name:");
QLineEdit *txt2=new QLineEdit();
layout->addWidget(label1,0,0);
layout->addWidget(txt1,0,1);
layout->addWidget(label2,1,0);
layout->addWidget(txt2,1,1);
QPushButton *qbutton = new QPushButton("ok");
layout->addWidget(qbutton,2,0);
window->setLayout(layout);
window->show();
return
拉伸窗口:
竖直布局
空项目练习。
main.cpp
#include <QApplication>
#include <QtGui>
#include <QtCore>
#include <QLabel>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
QWidget *window = new QWidget();
window->setWindowTitle("hello");
//QGridLayout *layout = new QGridLayout();
QVBoxLayout *layout = new QVBoxLayout();
//QGridLayout *layout = new QGridLayout();
QLabel *label1=new QLabel("name:");
QLineEdit *txt1=new QLineEdit();
QLabel *label2=new QLabel("name:");
QLineEdit *txt2=new QLineEdit();
layout->addWidget(label1,0);
layout->addWidget(txt1,0);
layout->addWidget(label2,1);
layout->addWidget(txt2,1);
QPushButton *qbutton = new QPushButton("ok");
layout->addWidget(qbutton,2,0);
window->setLayout(layout);
window->show();
return
水平布局
空项目练习。
main.cpp
#include <QApplication>
#include <QtGui>
#include <QtCore>
#include <QLabel>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
int main(int argc,char *argv[]){
QApplication app(argc,argv);
QWidget *window = new QWidget();
window->setWindowTitle("hello");
//QGridLayout *layout = new QGridLayout();
//QVBoxLayout *layout = new QVBoxLayout();
QHBoxLayout *layout = new QHBoxLayout();
QLabel *label1=new QLabel("name:");
QLineEdit *txt1=new QLineEdit();
QLabel *label2=new QLabel("name:");
QLineEdit *txt2=new QLineEdit();
layout->addWidget(label1);
layout->addWidget(txt1);
layout->addWidget(label2);
layout->addWidget(txt2);
QPushButton *qbutton = new QPushButton("ok");
layout->addWidget(qbutton);
window->setLayout(layout);
window->show();
return
spliter
Qt GUI Application
spliter水平或spliter竖直布局都可以拉动部件之间中间的分割线,使得图形变换。
QDir
空项目练习。
QDir可以实现很多路径操作,比如常用的’ls ‘, ‘mkdir’等。
main.cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFileInfo>
#include <QString>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/* find special path. */
QDir dir("/home/edemon/workspace");
qDebug()<<"worksapce: "<<dir.exists();
/* Returns a list of the root directories on this system. */
foreach (QFileInfo item,dir.drives()){
qDebug()<<item.absoluteFilePath();
}
QString path = "/home/edemon/workspace/qt_dir";
if(!dir.exists(path)){
dir.mkdir(path);
}
else qDebug()<<"here is already qt_dir path";
/* item.absolutePath(): /home/edemon/workspace/ */
foreach (QFileInfo item, dir.entryInfoList()){
if(item.isDir()) qDebug()<< "dir: "<<item.absoluteFilePath();
if(item.isFile()) qDebug()<< "file: "<<item.absoluteFilePath();
}
return
QStyle改变窗体风格
Qt Gui Applicatuion.
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle("macintosh");
MainWindow w;
w.show();
return a.exec();
}
/*
QStyle * QApplication::setStyle(const QString & style) [static]
The string must be one of the QStyleFactory::keys(),
typically one of "windows", "fusion", "windowsxp", or "macintosh".
Style names are case insensitive.
*/