zoukankan      html  css  js  c++  java
  • 【书籍】《Qt5开发及实例》笔记

       

     第一章 概述

       

    1.3.1 设计器实现

       

       

     1.3.2代码实现

       

       

       

     L1.2概念解析

     伙伴编辑模式

     信号与槽机制

       

     

     元对象系统

     布局管理器

       

    第二章

     2.1字符串

      字符串相加 替换 格式处理 去除空白符号等

     查询字符串数据

    字符串转换

       

     2.2容器类list map hash 不同容器操作速度不一样

    不同的容器,读写速度不一样

     

    QList<int> list;

    list<<1<<2<<3<<4<<5;

    QListIterator<int> i(list);

    for(;i.hasNext();)

    qDebug()<<i.next();

     Qmap

     

       

    2.3 Qvariant【可存储多种类型】

     

     2.4算法和正则表达式【】

     

    2.5 控件

    项目视图【】

    定时器【】

    项目控件【】

       

    隐式共享和 引用计数

     

     第三章 布局管理

    3.1分割窗口

    #include "mainwindow.h"

    #include <QApplication>

    #include<Qsplitter>

    #include<QTextEdit>

    #include <QTextCodec>

     

    int main(int argc, char *argv[])

    {

    QApplication a(argc, argv);

    QFont font("ZYSong18030",12);

    a.setFont(font);

    //主分割窗口

    QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);

    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);

    textLeft->setAlignment(Qt::AlignCenter);

    //右部分割窗口

    QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);

    splitterRight->setOpaqueResize(false);

    QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);

    textUp->setAlignment(Qt::AlignCenter);

    QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);

    textBottom->setAlignment(Qt::AlignCenter);

    splitterMain->setStretchFactor(1,1);

    splitterMain->setWindowTitle(QObject::tr("Splitter"));

    splitterMain->show();

     

    //MainWindow w;

    //w.show();

     

    return a.exec();

    }

     

    3.2停靠窗口【】

    #include "dockwindows.h"

    #include<QTextEdit>

    #include<QDockWidget>

     

    DockWindows::DockWindows(QWidget *parent)

    : QMainWindow(parent)

    {

    setWindowTitle(tr("DockWindows"));    //设置主窗口的标题栏文字

    QTextEdit *te=new QTextEdit(this);    //定义一个QTextEdit对象作为主窗口

    te->setText(tr("Main Window"));

    te->setAlignment(Qt::AlignCenter);

    setCentralWidget(te); //将此编辑框设为主窗口的中央窗体

    //停靠窗口1

    QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);

    dock->setFeatures(QDockWidget::DockWidgetMovable); //可移动

    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);

    QTextEdit *te1 =new QTextEdit();

    te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));

    dock->setWidget(te1);

    addDockWidget(Qt::RightDockWidgetArea,dock);

    //停靠窗口2

    dock=new QDockWidget(tr("DockWindow2"),this);

    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //可关闭、可浮动

    QTextEdit *te2 =new QTextEdit();

    te2->setText(tr("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed"));

    dock->setWidget(te2);

    addDockWidget(Qt::RightDockWidgetArea,dock);

    //停靠窗口3

    dock=new QDockWidget(tr("DockWindow3"),this);

    dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //全部特性

    QTextEdit *te3 =new QTextEdit();

    te3->setText(tr("Window3,The dock widget can be closed, moved, and floated"));

    dock->setWidget(te3);

    addDockWidget(Qt::RightDockWidgetArea,dock);

    }

     

    DockWindows::~DockWindows()

    {

     

    }

     

     

    3.3堆栈窗口

    #include "stackdlg.h"

    #include <QHBoxLayout>

    StackDlg::StackDlg(QWidget *parent)

    : QDialog(parent)

    {

    setWindowTitle(tr("StackedWidget"));

    list =new QListWidget(this);

    list->insertItem(0,tr("Window1"));

    list->insertItem(1,tr("Window2"));

    list->insertItem(2,tr("Window3"));

     

    label1 =new QLabel(tr("WindowTest1"));

    label2 =new QLabel(tr("WindowTest2"));

    label3 =new QLabel(tr("WindowTest3"));

     

    stack =new QStackedWidget(this);

    stack->addWidget(label1);

    stack->addWidget(label2);

    stack->addWidget(label3);

    QHBoxLayout *mainLayout =new QHBoxLayout(this);

    mainLayout->setMargin(5);

    mainLayout->setSpacing(5);

    mainLayout->addWidget(list);

    mainLayout->addWidget(stack,0,Qt::AlignHCenter);

    mainLayout->setStretchFactor(list,1);

    mainLayout->setStretchFactor(stack,3);

    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));

    }

     

    StackDlg::~StackDlg()

    {

     

    }

     

    3.4基本布局~

     

    #include "dialog.h"

    #include<QLabel>

    #include<QLineEdit>

    #include<QComboBox>

    #include<QPushButton>

    #include<QFrame>

    #include<QGridLayout>

    #include<QPixmap>

    #include<QHBoxLayout>

     

    Dialog::Dialog(QWidget *parent)

    : QDialog(parent)

    {

    setWindowTitle(tr("UserInfo"));

    /************** 左侧 ******************************/

    UserNameLabel =new QLabel(tr("用户名:"));

    UserNameLineEdit =new QLineEdit;

    NameLabel =new QLabel(tr("姓名:"));

    NameLineEdit =new QLineEdit;

    SexLabel =new QLabel(tr("性别:"));

    SexComboBox =new QComboBox;

    SexComboBox->addItem(tr("女"));

    SexComboBox->addItem(tr("男"));

    DepartmentLabel =new QLabel(tr("部门:"));

    DepartmentTextEdit =new QTextEdit;

    AgeLabel =new QLabel(tr("年龄:"));

    AgeLineEdit =new QLineEdit;

    OtherLabel =new QLabel(tr("备注:"));

    OtherLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);

     

    LeftLayout =new QGridLayout();

    LeftLayout->addWidget(UserNameLabel,0,0);             //用户名

    LeftLayout->addWidget(UserNameLineEdit,0,1);

     

    LeftLayout->addWidget(NameLabel,1,0);     //姓名

    LeftLayout->addWidget(NameLineEdit,1,1);

     

    LeftLayout->addWidget(SexLabel,2,0);     //性别

    LeftLayout->addWidget(SexComboBox,2,1);

     

    LeftLayout->addWidget(DepartmentLabel,3,0);     //部门

    LeftLayout->addWidget(DepartmentTextEdit,3,1);

     

    LeftLayout->addWidget(AgeLabel,4,0); //年龄

    LeftLayout->addWidget(AgeLineEdit,4,1);

     

    LeftLayout->addWidget(OtherLabel,5,0,1,2);     //其他

     

    LeftLayout->setColumnStretch(0,1);

    LeftLayout->setColumnStretch(1,3);

    /*********右侧*********/

    HeadLabel =new QLabel(tr("头像: ")); //右上角部分

    HeadIconLabel =new QLabel;

    QPixmap icon("312.png");

    HeadIconLabel->setPixmap(icon);

    HeadIconLabel->resize(icon.width(),icon.height());

    UpdateHeadBtn =new QPushButton(tr("更新"));

     

    TopRightLayout =new QHBoxLayout();

    TopRightLayout->setSpacing(20);

    TopRightLayout->addWidget(HeadLabel);

    TopRightLayout->addWidget(HeadIconLabel);

    TopRightLayout->addWidget(UpdateHeadBtn);

    IntroductionLabel =new QLabel(tr("个人说明:")); //右下角部分

    IntroductionTextEdit =new QTextEdit;

     

    RightLayout =new QVBoxLayout();

    RightLayout->setMargin(10);

    RightLayout->addLayout(TopRightLayout);

    RightLayout->addWidget(IntroductionLabel);

    RightLayout->addWidget(IntroductionTextEdit);

    /*--------------------- 底部 --------------------*/

    OkBtn =new QPushButton(tr("确定"));

    CancelBtn =new QPushButton(tr("取消"));

     

    ButtomLayout =new QHBoxLayout();

    ButtomLayout->addStretch();

    ButtomLayout->addWidget(OkBtn);

    ButtomLayout->addWidget(CancelBtn);

    /*---------------------------------------------*/

    QGridLayout *mainLayout =new QGridLayout(this);

    mainLayout->setMargin(15);

    mainLayout->setSpacing(10);

    mainLayout->addLayout(LeftLayout,0,0);

    mainLayout->addLayout(RightLayout,0,1);

    mainLayout->addLayout(ButtomLayout,1,0,1,2);

    mainLayout->setSizeConstraint(QLayout::SetFixedSize);

    }

     

    Dialog::~Dialog()

    {

     

    }

     

        

    第四章 基本对话框--【各种基本对话框】

     

     

     

     

    4.7 工具盒类

    4.8 进度条

    4.9调色板和电子钟

     

    4.10可扩展对话框

    4.11不规则对话框

    4.12程序启动画面 qsplashscreen

     

    第五章 主窗体

    5.1.3菜单和工具栏的实现

    打印文本 图片

     

    文本编辑

     

    文本颜色 字体 字号 下划线 粗体 倾斜

    段落对齐 文本排序 列表序号

    第六章 图形与图片

     

    窗体位置

     

    基本图形的绘制

     

     

    void PaintArea::paintEvent(QPaintEvent *)

    {

    QPainter p(this);

    p.setPen(pen);

    p.setBrush(brush);

     

    QRect rect(50,100,300,200);

     

    static const QPoint points[4]=

    {

    QPoint(150,100),

    QPoint(300,150),

    QPoint(350,250),

    QPoint(100,300)

    };

    int startAngle =30*16;

    int spanAngle =120*16;

     

    QPainterPath path;

    path.addRect(150,150,100,100);

    path.moveTo(100,100);

    path.cubicTo(300,100,200,200,300,300);

    path.cubicTo(100,300,200,200,100,100);

    path.setFillRule(fillRule);

     

    switch(shape)

    {

    case Line:     //直线

    p.drawLine(rect.topLeft(),rect.bottomRight());     break;

    case Rectangle:     //长方形

    p.drawRect(rect);    break;

    case RoundRect:     //圆角方形

    p.drawRoundRect(rect);     break;

    case Ellipse:     //椭圆形

    p.drawEllipse(rect);     break;

    case Polygon:     //多边形

    p.drawPolygon(points,4);     break;

    case Polyline: //多边线

    p.drawPolyline(points,4);     break;

    case Points:     //点

    p.drawPoints(points,4);     break;

    case Arc:     //弧

    p.drawArc(rect,startAngle,spanAngle);     break;

    case Path:     //路径

    p.drawPath(path);     break;

    case Text:     //文字

    p.drawText(rect,Qt::AlignCenter,tr("Hello Qt!"));    break;

    case Pixmap:     //图片

    p.drawPixmap(150,150,QPixmap("butterfly.png"));     break;

    default:     break;

    }

    }

     

    双缓冲机制    

    void DrawWidget::mousePressEvent(QMouseEvent *e)

    {

    startPos = e->pos();

    }

     

    void DrawWidget::mouseMoveEvent(QMouseEvent *e)

    {

    QPainter *painter = new QPainter;

     

    QPen pen;

    pen.setStyle((Qt::PenStyle)style);

    pen.setWidth(weight);

    pen.setColor(color);

     

    painter->begin(pix);

    painter->setPen(pen);

    painter->drawLine(startPos,e->pos());

    painter->end();

    startPos =e->pos();

    update();

    }

     

    void DrawWidget::paintEvent(QPaintEvent *)

    {

    QPainter painter(this);

    painter.drawPixmap(QPoint(0,0),*pix);

    }

     

    void DrawWidget::resizeEvent(QResizeEvent *event)

    {

    if(height()>pix->height()||width()>pix->width())

    {

    QPixmap *newPix = new QPixmap(size());

    newPix->fill(Qt::white);

    QPainter p(newPix);

    p.drawPixmap(QPoint(0,0),*pix);

    pix = newPix;

    }

    QWidget::resizeEvent(event);

    }

     

    void DrawWidget::clear()

    {

    QPixmap *clearPix =new QPixmap(size());

    clearPix->fill(Qt::white);

    pix = clearPix;

    update();

    }

    第七章 图形视图框架

     

     

     

    第八章 模型视图结构

     

     

     

     

    第九章 文件和磁盘处理

     

     

    第十章 网络和通信

     

     

     

     

     

    第十一章 事件处理

     

    按键事件

    事件过滤

     

     

    第十二章 多线程

    多线程控制 互斥量 信号量 线程等待

     

    第十三章 数据库

     

     

     

    第十四章 国际化

    tr 函数 翻译

    第十五章 单元测试框架

     

    第十六章 综合实例:汽车销售管理

     

     

     

    第十七章 综合实例:聊天软件

    使用toolbox罗列用户,使用toolbutton显示用户头像和名称

     

    第八章

     

    第八章

     

  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/tangyuanjie/p/14028234.html
Copyright © 2011-2022 走看看