文章目录

  • 01_QT介绍
  • 02_项目文件
  • 03_指定父对象
  • 04_信号和槽
  • 05_两个独立的窗口(案例)
  • 06_带参信号与Lamda表达式
  • 07_菜单栏_工具栏(案例)
  • 08_模态和非模态对话框(案例)
  • 09_常用控件
  • 10_布局
  • 11_自定义控件
  • 12_Qt 样式表
  • 13_事件
  • 14_事件的接收与忽略

01_QT介绍

QT =》 GUI 编程 =》 图形界面
QT 是一套应用程序开发类库,跨平台
如何学习Qt ? =》 多看Qt 帮助文档(F:\Qt_system\5.12.3\mingw73_32\bin\assistant.exe)

1991年 由奇趣科技开发
1996年 进入商业领域 Linux(gnome、桌面环境KDE基础)
2008年 奇趣公司被诺基亚公司收购
2012年 Qt 又被微软公司收购

创建一个工程步骤:打开Qt Creator / 文件(File) =》 新建文件或项目(Ctrl + N) =》Application =》 Qt Widgets Application =》Choose… =》命名项目 并选择好路径 =》然后点击下一步 =》创建界面暂时先不勾选,后续讲解ui设计器


QMainWindow 是主窗口类, 主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口;
QWidget 是所有具有可视界面类的基类,选择QWidget 创建的界面对各种界面组件都可以支持;
QDialog 是对话框类,可建立一个基于对话框的界面。

#include "mywidget.h"
#include <QApplication>//应用程序类,qt 头文件没有.h , 头文件和类名一致int main(int argc, char *argv[])
{QApplication a(argc, argv);//有且只有一个应用程序类的对象MyWidget w;//创建窗口w.show();//窗口默认隐藏,需要人为显示return a.exec();//让程序一直执行,等待用户操作(阻塞)
}

samp_1.pro 项目管理文件
.h 头文件
.cpp 源文件
.ui 界面文件

=Qtcreator中常用快捷键总结===============

F1 查看帮助
F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)
Shift+F2 声明和定义之间切换
F4 头文件和源文件之间切换
——————————————————————————-
Alt+0 显示或者隐藏侧边条,编辑模式下起作用(有时写的函数太长,屏幕不够大,就用这个)
Ctrl+Space 自动补全(貌似会和输入法的切换冲突)
——————————————————————————-
esc 切换到编辑模式
Alt(按住)+ Enter 将光标移动到h文件中的方法声明。按Alt(按住),再按回车键将在cpp中添加该函数的定义。
——————————————————————————-
Ctrl+I 自动对齐
Ctrl+/ 注释行,取消注释行
——————————————————————————-
Ctrl+B 编译工程
Ctrl+R 运行工程
F5 开始调试
Shift+F5 停止调试
F9 设置和取消断点
F10 单步前进
F11 单步进入函数
Shift + F11 单步跳出函数
——————————————————————————

02_项目文件

QT += core gui 表示模块

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 高于4版本, 为了兼容QT4

TARGET = Project 项目名称
TEMPLATE = app 指定makefile 的类型,app 可执行程序 lib库

#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 # 表示注释

CONFIG += c++11 Lamda 表达式需要

SOURCES += \ 源文件
main.cpp
mywidget.cpp

HEADERS += \ 头文件
mywidget.h

03_指定父对象

如果不指定父对象,对象和对象没有关系,独立,指定父对象,只需要显示父对象显示,上面的子对象自动显示
指定父对象有两种方式:
1)setParent
2)通过构造函数传参

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent)
{//设置标题this->setWindowTitle("标题");/*类成员函数有个特殊指针,this谁(哪个对象)调用这个成员函数,this 就指向这个对象this 可以操作类型任意成员*///通过setParent 设置为父对象btn.setText("111");//设为成员变量,就不会释放btn.setParent(this);btn.move(100, 100);//通过构造函数 设置为父对象QPushButton* btn1 = new QPushButton(this);btn1->setText("222");btn1->move(200, 200);}MyWidget::~MyWidget()
{}

04_信号和槽

基本格式是:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
connect(
&btn,//信号发出者
&QPushButton::pressed,//信号
this,//信号接收者
&MyWidget::MySlot//槽函数
);

自定义槽函数:任意的成员函数,普通全局函数,静态函数
由于信号都是没有返回值的,所以槽函数一定没有返回值

void MainWidget::MySlot()
{
btn1->setText(“123”);
}

1、一个信号可以连接多个槽函数
2、槽函数执行的顺序是随机的,不能控制
3、一个槽函数可以被多个信号连接
4、信号槽连接成功后,可以断开连接disconnect
5、槽函数可以是 lamda 表达

信号与槽:QT 对象之间通信的接口

05_两个独立的窗口(案例)

信号可以重载
信号就是函数的声明,只需要声明,无需定义

#include "widget.h"
#include <QDebug>
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent)
{b1.setParent(this);b1.setText(QString("关闭"));b1.move(100, 100);b2 = new QPushButton(this);b2->setText("abc");connect(&b1, &QPushButton::pressed, this, &Widget::close);connect(b2, &QPushButton::released, this, &Widget::mySlot);connect(b2, &QPushButton::released, &b1, &QPushButton::hide);b3.setParent(this);b3.setText("切换到子窗口");b3.move(50, 50);connect(&b3, &QPushButton::released, this, &Widget::Change);void (SubWidget::*psub)() = &SubWidget::mySignal;connect(&sub1, psub, this, &Widget::Deal);
}Widget::~Widget()
{}void Widget::mySlot()
{b2->setText("123");
}void Widget::Change()
{qDebug() << "Change()" << endl;this->hide();sub1.show();
}void Widget::Deal()
{qDebug() << "Change()" << endl;this->show();sub1.hide();
}
#ifndef WIDGET_H
#define WIDGET_H#include <QPushButton>
#include <QWidget>
#include "subwidget.h"class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();public signal:void mySlot();void Change();void Deal();
private:QPushButton b1;QPushButton* b2;QPushButton b3;SubWidget sub1;
};#endif // WIDGET_H
#include "subwidget.h"SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("小弟");b5.setParent(this);b5.setText("切换至主菜单");b5.move(50, 50);connect(&b5, &QPushButton::clicked, this, &SubWidget::sendSlot);}void SubWidget::sendSlot()
{emit mySignal();emit mySignal(250, "I Love you");
}
#ifndef SUBWIDGET_H
#define SUBWIDGET_H#include <QWidget>
#include <QPushButton>class SubWidget : public QWidget
{Q_OBJECT
public:explicit SubWidget(QWidget *parent = nullptr);signals:/*信号必须有signals 关键字来声明信号没有返回值,但可以有参数信号就是函数的声明,无需定义使用:emit mySignal();*/void mySignal();void mySignal(int , QString);
public slots:void sendSlot();
private:QPushButton b5;
};#endif // SUBWIDGET_H

06_带参信号与Lamda表达式

Lamda 表达式 C++11 增加的新特性 项目文件: CONFIG += c++11
QT 配合信号一起使用,非常方便
Lamda 表达, 匿名函数对象
// = : 把外部所有局部变量,类中所有成员以值的传递方式
// this : 类中所有成员以值传递方式
// & : 把外部所有局部变量, 引用符号
若想改变外部变量的值 需要用到关键字 mutable
QPushButton *pb1 = new QPushButton(this);
pb1->setText(“ddd”);
connect(pb1, &QPushButton::released,
pb1
{
pb1->setText(“123”);
qDebug() << “123456”;
}
);

带参数的信号
如果信号存二义性(重载) => 用函数指针解决
void(subwidget:: *funSignal)() = &subwidget::mySignal;
connect(&subWin, funSignal, this, &MainWidget::dealSub);

void(subwidget:: *funSignal)(int , QString)= &subwidget::mySignal;
connect(&subWin, funSignal, this, &MainWidget::dealSlot);

int fun(int ); <=> void (*p)(int) = fun;

str.toUtf8() -> 字节数据 QByteArray
.data() -> QByteArray - > char*

QT 4=======
connect(pBtn, SIGNAL(clicked(bool)), this, SLOT(close()));
1、宏:SIGNAL 、 SLOT,会把括号内的东西当作字符串,不做安全检查
2、自定义槽函数,必须在头文件声明 public slots:
信号的参数个数可以大于槽函数参数的个数
槽函数个数不可以大于信号参数个数

07_菜单栏_工具栏(案例)

核心控件和浮动窗口

#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QToolBar>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{resize(600, 400);//菜单栏QMenuBar *mBar = menuBar();//添加菜单--------QMenu *pFile = mBar->addMenu("文件");//添加菜单项,添加动作QAction *pNew = pFile->addAction("新建");connect(pNew, &QAction::triggered,[=](){qDebug() << "I Love you";});pFile->addSeparator();//分割线QAction *pOpen = pFile->addAction("打开");//工具栏QToolBar *toolBar = addToolBar("toolBar");toolBar->addAction(pNew);QPushButton *b = new QPushButton(this);b->setText("123");toolBar->addWidget(b);connect(b, &QPushButton::clicked,[=](){b->setText("456");});//------------------------------------------------------------------------//状态栏QStatusBar* pStatusBar = statusBar();QLabel* pLabel = new QLabel(this);pLabel->setText("Normal text file");pStatusBar->addWidget(pLabel);//addwidget 从左往右添加pStatusBar->addWidget(new QLabel("2", this));//addPermanentWidget 从右往左添加,状态栏在右边pStatusBar->addPermanentWidget(new QLabel("3", this));//核心控件QTextEdit* pTextEdit = new QTextEdit(this);setCentralWidget(pTextEdit);//浮动窗口QDockWidget *pDock = new QDockWidget(this);addDockWidget(Qt::RightDockWidgetArea, pDock);QTextEdit* pTextEdit1 = new QTextEdit(this);pDock->setWidget(pTextEdit1);
}MainWindow::~MainWindow()
{}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();
};#endif // MAINWINDOW_H

08_模态和非模态对话框(案例)

模态对话框:只能操作当前对话框
非模态对话框:相互独立,互不影响

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>
#include <QString>
#include <QPushButton>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setWindowTitle("模态和非模态对话框");resize(600, 400);QPushButton * pBtn = new QPushButton("^-^", this);pBtn->setGeometry(100, 100, 200, 200);QMenuBar* pMenuBar = menuBar();
//    QMenu* pMenu = new QMenu(this);
//    pMenu->setTitle("文件");
//    pMenuBar->addMenu(pMenu);QMenu* pMenu =pMenuBar->addMenu("对话框");QAction* pAction = new QAction("模态", this);pMenu->addAction(pAction);connect(pAction, &QAction::triggered,[](){QDialog dlg;dlg.exec();qDebug() << "31";});pMenu->addSeparator();//添加分隔符QAction* pAction1 = new QAction("非模态", this);pMenu->addAction(pAction1);connect(pAction1, &QAction::triggered,[this](){
//                dlg1.show();QDialog* pDiaglog = new QDialog;pDiaglog->setAttribute(Qt::WA_DeleteOnClose);qDebug() << "45";});QAction* pAction3 = new QAction("关于对话框", this);pMenu->addAction(pAction3);connect(pAction3, &QAction::triggered,[=](){//QMessageBox::about(this, "about", "关于Qt");
//                  QFileDialog(this, "Open", "../");QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),"/home","Text files (*.txt);;XML files (*.xml)");qDebug() << "62";});}MainWindow::~MainWindow()
{delete ui;
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QDialog>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;QDialog dlg1;
};#endif // MAINWINDOW_H

09_常用控件

#include <QDebug>
#include<QCompleter>
#include <QStringList>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);//设置ui父窗口ui->pBtnClose->setText("切换");//设置按钮文本QString str = ui->lineEdit->text();//获取单行编辑框文本qDebug() << str;//应用程序输出打印ui->lineEdit->setText("12345678");//设置单行编辑框文本ui->lineEdit->setTextMargins(15, 0, 0, 0);//显示内容边距设置//ui->lineEdit->setEchoMode(QLineEdit::Password);//显示样式,是否设置为密码格式QStringList list;list << "hello" << "How are you" << "hehe";//默认项QCompleter *pCom = new QCompleter(list, this);pCom->setCaseSensitivity(Qt::CaseInsensitive);//不区分大小写ui->lineEdit->setCompleter(pCom);//单行编辑框联想词
}

下图继承关系:QObject -> QWidget -> QMainWindow

按钮系列:
Push Button 按钮
Tool Button 工具按钮
Radio Button 单选按钮
Check Box 复选框
Command Link Button 命令链接按钮
Dialog Button Box 按钮盒

输入部件系列:
Combo Box 下拉框(组合框)
Font Combo Box 字体下拉框
Line Edit 单行文本编辑
TextEdit 多行文本编辑,可显示图片
Plain Text Edit 纯文本编辑
Spin Box 整型微调
Double Spin Box 浮点微调
Time Edit 时间编辑
Date Edit 日期编辑
Date/Time Edit 时间、日期编辑
Dial 拨号
Horizontal Scroll Bar 水平滚动条
Vertical Scroll Bar 垂直滚动条
Horizontal Slider 水平滑块
Vertical Slider 垂直滑块
Key Sequence Edit 编辑快捷方式(按键序列编辑)

显示控件系列:
Label 标签
TextBrowser 文本浏览器
Graphics View 图形视图
Calendar 日历
LCDNumber 液晶数字(数码管)
Progress Bar 进度条
Horizontal Line 水平线
Vertical Line 垂直线
OpenGL Widget 开放式图形库工具
QQuickWidget 嵌入QML 工具
QWebView Web视图

容器组:
Group Box 组框
Scroll Area 滚动区域
ToolBox 工具箱
TabWidget 堆叠部件
Frame 帧
Widget 小部件
MdiArea MDI区域
DockWidget 停靠窗体部件
QAxWidget 封装Flash的 ActiveX控件

标签按钮

    //设置文本ui->label_text->setText("^_^");//设置图片//步骤:选中项目右键-》添加文件 -》 QT (QT Resource File) -》命名//添加了Resources image.qrc ,打开方式:右键-》Open in Edit -》修改前缀ui->label_Image->setPixmap(QPixmap("://Image/qq.png"));//让图片自动适应label的大小ui->label_Image->setScaledContents(true);//设置动画QMovie *myMovie = new QMovie("://Image/qq.png");ui->label_Gif->setMovie(myMovie);ui->label_Gif->setScaledContents(true);myMovie->start();//启动动画//设置链接ui->label_Url->setText("<h1><a href=\"https://www.cnblogs.com/tsvico/p/11877964.html\">查阅一下</a></h1>");ui->label_Url->setOpenExternalLinks(true);//数码管ui->lcdNumber->display(123);//进度条ui->progressBar->setMinimum(0);ui->progressBar->setMaximum(200);ui->progressBar->setValue(100);

10_布局

绝对位置布局,相对位置布局
ctrl + H 水平布局
ctrl + L 垂直布局
alt + shift + r 预览
弹簧协助布局,编辑其属性

11_自定义控件

1、在原有的项目上创建一个类,右键项目,添加一个 C++ clas, 选择基类 QWidget ,命名为smallwidget
2、在ui界面拖拽一个容器Widget,选择,右键将其提升为smallwidget

#include "smallwidget.h"
#include <QSpinBox>
#include <QSlider>
#include <QHBoxLayout>SmallWidget::SmallWidget(QWidget *parent) : QWidget(parent)
{QSpinBox *pSpin = new QSpinBox(this);QSlider *pSlider = new QSlider(Qt::Horizontal, this);QHBoxLayout *pLayout = new QHBoxLayout(this);pLayout->addWidget(pSpin);pLayout->addWidget(pSlider);connect(pSpin, static_cast<void (QSpinBox::*) (int)>(&QSpinBox::valueChanged), pSlider, &QSlider::setValue);connect(pSlider, static_cast<void (QSlider::*) (int)>(&QSlider::sliderMoved), pSpin, &QSpinBox::setValue);
}


12_Qt 样式表

Qt样式表 与 CSS 的语法规则几乎完全相同
通过调用:QWidget::setStyleSheer() 或 QApplication::setStyleSheet()

案例1:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->setStyleSheet("QLabel{color:rgb(255, 255, 255);""background-color:red;""}");ui->label->setStyleSheet("QLabel{color:rgb(255, 255, 255);""background-color:blue;""}");
}MainWindow::~MainWindow()
{delete ui;
}

案例2:

#include "mymainwindow.h"
#include "ui_mymainwindow.h"MyMainWindow::MyMainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MyMainWindow)
{ui->setupUi(this);ui->pushButton->setStyleSheet("QPushButton{""border-image:url(://Image/a.jpg);""}""QPushButton:hover{""border-image:url(://Image/b.jpg);""}""QPushButton:pressed{""border-image:url(://Image/c.jpg);""}");
}MyMainWindow::~MyMainWindow()
{delete ui;
}

13_事件

1、Qt 中所有的时间类都继承于QEvent
2、event() 函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)
索引:帮助-》索引(搜索QT类)

事件处理器:
1)都是虚函数(基类中定义QWidget QObject)
2)我们派生类(子类)只是重写这些虚函数(虚函数必须和基类中的虚函数一致)

定义函数的快捷键: Alt + Enter / Enter

以鼠标点击,移动,释放为例:

#ifndef MYLABEL_H
#define MYLABEL_H#include <QLabel>
#include <QMouseEvent>
#include <QDebug>
class MyLabel : public QLabel
{Q_OBJECT
public:explicit MyLabel(QWidget *parent = nullptr);protected:void mousePressEvent(QMouseEvent *ev);//鼠标点击void mouseReleaseEvent(QMouseEvent *ev);//鼠标释放void mouseMoveEvent(QMouseEvent *ev);//鼠标移动signals:public slots:
};#endif // MYLABEL_H
#include "mylabel.h"MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{}void MyLabel::mousePressEvent(QMouseEvent *ev)
{int iXPos = ev->x();int iYPos = ev->y();//sprintf/*QString str = QString("abc %1 ^_^ %2").arg(123).arg("make");str = abc 123 ^_^ make*/if(ev->button() == Qt::LeftButton){qDebug() << "左键按下";}else  if(ev->button() == Qt::RightButton){qDebug() << "右键按下";}else{qDebug() << "中间按下";}QString QStrText = QString("<h1><center>Mouse Press: (%1, %2)</h1></center>").arg(iXPos).arg(iYPos);this->setText(QStrText);
}void MyLabel::mouseReleaseEvent(QMouseEvent *ev)
{}void MyLabel::mouseMoveEvent(QMouseEvent *ev)
{}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QKeyEvent>
#include <QDebug>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void keyPressEvent(QKeyEvent *);//键盘按键按下ASCIIvoid timerEvent(QTimerEvent *);//定时器private:Ui::MainWindow *ui;int iTimeID;
};#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);iTimeID =  this->startTimer(1000);//毫秒为单位,每隔1s 触发一次定时器
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::keyPressEvent(QKeyEvent *e)
{qDebug() << e->key();switch (e->key()){case Qt::Key_Alt :qDebug() << "Alt Pressed";break;}
}void MainWindow::timerEvent(QTimerEvent *event)
{static int sec = 0;sec++;ui->label->setText(QString("<h1><center>Time out: (%1)</h1></center>").arg(sec));if(5 == sec){this->killTimer(iTimeID);//关闭定时器}}

14_事件的接收与忽略

创建一个MyButton 类, 在ui 界面拖拽一个按钮,并且提升为 MyButton

#ifndef MYBUTTON_H
#define MYBUTTON_H#include <QPushButton>
#include <QMouseEvent>class MyButton : public QPushButton
{Q_OBJECT
public:explicit MyButton(QWidget *parent = nullptr);protected:void mousePressEvent(QMouseEvent* event);signals:public slots:
};#endif // MYBUTTON_H
#include "mybutton.h"
#include <QDebug>MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{}void MyButton::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){//如果是左键qDebug() << "按下的是左键" ;//事件接收后,就会往下传递event->ignore();//忽略,事件继续往下传递,给谁传递?//事件传递给了父组件(QWidget),不是给父类(基类)}
//    else
//    {//        //不做处理
//        QPushButton::mousePressEvent(event);
//        //事件的忽略,事件继续往下传递
//    }QPushButton::mousePressEvent(event);
}
#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);iTimeID =  this->startTimer(1000);//毫秒为单位,每隔1s 触发一次定时器QObject::connect(ui->pushButton, &MyButton::clicked,[=](){qDebug() << "按钮被按下" << endl;});}

event()
事件对象创建完成后,Qt 将这个事件对象传递给QObject 的 event() 函数
event() 函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,
分发给不同的事件处理器(event handler)

bool event(QEvent* e);bool MainWindow::event(QEvent *e)
{//事件分发if(e->type() == QEvent::Timer){qDebug() << "---------";//如果返回true , 事件停止传播return true;}else{return QWidget::event(e);}
}

QT学习(第一部分)相关推荐

  1. QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面

    QT学习 第一章:基本对话框--利用Qt Designer设计多个UI界面 效果截图: 创建上文件夹Designers,使用Designer设计三个UI界面: First.ui Second.ui T ...

  2. QT入门第一天平台使用规则和代码逻辑学习(初学者)

    QT入门第一天平台使用规则和代码逻辑学习 QT学习目的,岗位需求 QT的 应用领域,发展历史 QT下载安装,不同版本QT介绍 新建QT工程 1.集成开发环境介绍 2.新建QT工程 3.QT工程介绍 Q ...

  3. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  4. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  5. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

  6. QT学习笔记(1)----- QT简介

    名字由来 在<C++ GUI Programming with Qt 4>里有这么一段介绍: A Brief Histroy of Qt: The letter 'Q' was chose ...

  7. Qt学习之路(2):Hello, world!

    任何编程技术的学习第一课基本上都会是Hello, world!,我也不想故意打破这个惯例--照理说,应该首先回顾一下Qt的历史,不过即使不说这些也并无大碍. 或许有人总想知道,Qt这个单词是什么意思. ...

  8. QT学习笔记(十一):QString类

    QT学习笔记(十一):QString类 1.概述 2.编辑操作 3.查询操作 3.转换操作 1.概述 1.1 QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中.QStr ...

  9. QT学习笔记(十):通用算法示例

    QT学习笔记(十):通用算法示例 std是C++标准库统一使用的命名空间(namespace)的名称,C++标准库中的名字全部都在std这个命名空间中,std也就是英文"standard&q ...

  10. QT学习笔记(八):顺序容器和关联容器

    QT学习笔记(八):顺序容器和关联容器 一.前言 二.容器介绍 2.1 顺序容器 2.2 关联容器 二.顺序容器示例 三.关联容器 一.前言 在Qt库中为我们提供了一系列的基于模板的容器类(conta ...

最新文章

  1. Windows下安装 openpyxl
  2. boost源码剖析之:多重回调机制signal(上)
  3. 通过计算机二级考试的计划,如何轻松通过国家计算机二级考试
  4. Java内存管理-掌握虚拟机类加载机制(四)
  5. Apache Doris : 一个开源 MPP 数据库的架构与实践
  6. 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
  7. 旅程落幕!网易相册将停止运营 这里有你的回忆吗?
  8. matlab 量化 策略,【策略分享】Matlab量化交易策略源码分享
  9. Hadoop学习总结(2)——Hadoop入门详解
  10. 第五节 电阻分压 蓦然回首,那人却在,灯火阑珊处
  11. 一次破解TP-Link WAR308路由器的经历(2)
  12. 打包或者编译python程序
  13. Java实现 LeetCode 273 整数转换英文表示
  14. 【微信小程序】canvas生成分享图片海报模糊解决方法
  15. TP50、TP90、TP99的理解和使用
  16. linux/windows_vscode_配置mingw的C/C++环境(by official doc)/一些可能遇到的问题和对策)/vscode中文输出乱码问题
  17. ORA-3136 WARNING: inbound connection timed out
  18. linux 目录 问号 原因,linux – 如何修复所有问号作为权限的目录
  19. 20岁,他来武大读博!
  20. 编程之美学习笔记--一摞烙饼的排序

热门文章

  1. Caldera安装及简单使用
  2. 飞桨亮相GTLC技术领导力峰会,共话 AI 技术的落地实践
  3. 微信摇一摇.周边 (技术实施原理)
  4. Teleportation
  5. Mac苹果电脑出现“磁盘空间不足”通知如何释放磁盘内存空间?
  6. dell服务器查询配置文件,dell R720服务器系统配置文件设置
  7. 接入滴滴打车html5 网页版
  8. cloudfront_使用CloudFront进行动态图像交付
  9. 激进推动2G退网迎恶果,中国联通用户数再跌,快跌穿3亿了
  10. 应用安全系列之三十三:配置管理