Qt学习
- 学习中的错误
- 常用快捷键
- 杂项
- 布局
- 信号与槽
- 数据库相关
- QSS
- 选择器 {property:value}
- Qt样式表设置函数 setStyleSheet()
- QSS文本属性
- 事件
- QMouseEvent:鼠标事件
- 键盘事件
- QWheelEvent:滚轮事件
- QCloseEvent:关闭事件
- QTimerEvent:超时事件
- QEvent 中:事件过滤器
- QPaintEvent:绘图事件
- QThread:线程
- 线程通信 -- QMutex:互斥锁
- 线程通信 -- QSemaphore:信号量
- 网络相关
- QUdpSocket:UDP套接字
- QTcpSocket:tcp通信套接字
- QTcpServer:tcp连接套接字
- QPixmap
- QFile:文件相关
- QFileInfo:文件信息
- QDir:目录相关
- QWidget 相关
- QWidget
- QPushButton: 按钮
- QLineEdit: 行编辑器
- QCheckBox: 复选框
- QRadioButton: 单选按钮
- QGroupBox: 分组框
- QLabel: 标签
- QFileDialog: 文件对话框
- QInputDialog 输入对话框
- QMessageBox 消息框
- QFontDialog 字体对话框
- QColorDialog 颜色对话框
- 自定义对话框 class myDialog : public QDialog
- QTextEdit:文本编辑器
- QListWidget:列表部件
- QComboBox:下拉条(下拉列表框、组合框)
- QStackedWidget:堆叠窗口
- QSpinBox:自旋框(整数)
- QDoubleSpinBox:数字设定框(浮点数)
- QSlider:滑动条
- QScrollBar:滚动条
- QProgressBar:进度条
- QTime:时间
- QTimeEdit:时间编辑器
- QDateTime:日期
- QDateTimeEdit:日期编辑器
- QTimer:定时器
- QMainWindow 主窗口 -- 相关
- QMenu 菜单栏
- QToolBar 工具栏
- QStatusBar 状态栏
- 中央窗口
- 一些操作
- 图片等比例缩放显示
- 图片标签 和 文字标签居中 注意
学习中的错误
- 堆叠窗口 需要放在布局中。
- “程序异常结束”:声明了私有指针变量,直接使用(操作野指针)
常用快捷键
F1 //查看帮助,文档
F2 //快速到变量声明
F4 //在 cpp 和 h 文件切换
alt +enter //自动创建类的定义
Shift + F2 //函数的声明和定义之间快速切换
Shift+delete //剪切当前行
Ctrl + R //运行程序
Ctrl + B //Build 项目
Ctrl + / //注释当前行 或者 选中的区域
杂项
//sender() -- 谁产生信号进入的槽函数,通过转换函数转换为对应的派生类对象类型
//继承关系间的转换 static_cast OR dynamic_cast(含有虚函数)
QPushButton *pb = static_cast<QPushButton *> (sender());str.chop(n); //去掉字符串str最后n个元素,改变了源字符串
str.indexOf('.'); //在str内查找子串
str.toLatin1(); //转为 QByteArray 类型QString i;
QString total;
QString fileName;
//位置编号必须在 1-99之间
QString status = QString("Processing file %1 of %2: %3").arg(i).arg(total).arg(fileName);
布局
QHBoxLayout: 水平布局addWidget(QWidget *) --- 添加控件addLayout(QLayout *) --- 添加布局/*添加一个可拉伸空间,最小尺寸为零,拉伸系数为拉伸到该框布局的末端。*/hbox->addStretch();
QVBoxLayout:垂直布局addWidget(QWidget *) --- 添加控件addLayout(QLayout *) --- 添加布局
QGridLayout:栅格布局addWidget(QWidget *, int row, int column, int rowSpin, int columnSpin); 参数:控件、行、列、行跨度、列跨度
信号与槽
1、信号与槽函数关联: connect()一对一:一个信号对应一个槽函数一对多:一个信号对应多个槽函数多对一:多个信号对应同一个槽函数
2、信号与信号关联:sig1关联sig2时,当sig1产生时会自动触发sig2信号,但是sig2产生时不会触发sig1
3、解除关联:disconnect()
4、槽函数的参数:槽函数的参数是由信号的参数传递,因此:槽函数的参数个数一定是小于或等于信号的参数个数当槽函数有参数时,参数类型一定与信号对应参数类型一致
5、槽函数:如果槽函数是自定义的:声明需要放在slots标签之下定义放在cpp文件中槽函数也是类的成员函数,也可以像成员函数一样被调用
5、信号:当自定义信号时:类中需要加宏: Q_OBJECT信号的声明需要放在 signals 标签之下信号不需要定义发射信号:emit 信号;
数据库相关
QSqlDatabase //数据库类
QSqlQuery //执行sql语句类
QSqlError //sql错误类
//Pro文件中添加 sql 模块//添加sqlite数据库
QSqlDatabase mydb = QSqlDatebase::addDatabase("QSQLLITE");
//设置库名
mydb.setDatebaseName("user.db");
//打开数据库
if ( !mydb.open() ) //打开失败qDebug() << mydb.lastError().text(); //输出错误信息//执行sql语句
query = new QSqlQuery(mydb);
if ( !query->exec("create tabel if not exists user(name text, pswd text)") ) //执行语句失败 qDebug() << query->lastError().text(); //输出错误信息
QString sql = QString("insert into user values('%1', '%2 ')").arg(name, pswd);
if( !query->exec(sql) )//对于查找语句
query->exec("select * from user");
//查找到几条记录就循环几次
while( query->next() ) //循环每一行记录
{qDebug() << query->value(0).toString(); //输出第一列的信息qDebug() << query->value(1).toString(); //输出第一列的信息
}
QSS
选择器 {property:value}
QPushButton,QLineEdit{//属性不区分大小写color:red;background-color:white;
}
Qt样式表设置函数 setStyleSheet()
//:pressed按下时才触发
ui->pb->setStyleSheet(QString("QPushButton:pressed{color:rgb(255, 0, 0)}"));
QSS文本属性








事件
- 当系统的类无法满足想要的需求时,自定义类,继承系统类,重写需要的事件
//忽略该事件
event->ignore();
QMouseEvent:鼠标事件
protected:
void mousePressEvent(QMouseEvent *event); //鼠标按下事件
void mouseReleaseEvent(QMouseEvent *event); //鼠标释放事件
void mouseDoubleClickEvent(QMouseEvent *event); //鼠标双击事件
void mouseMoveEvent(QMouseEvent *event); //鼠标移动事件
//设置追踪鼠标,不按下鼠标,鼠标移动时也能触发鼠标移动事件
setMouseTracking(true);//event->button() 获取鼠标按下的按键,判断是左键|右键|中键...
// enum Qt::MouseButton
if ( event->button() == Qt::LeftButton )qDebug() << "Mouse leftbutton pressed!";
else if ( event->button() == Qt::RightButton )qDebug() << "Mouse rightbutton pressed!";
else if ( event->button() == Qt::MidButton )qDebug() << "Mouse midbutton pressed!";
else if ( event->button() == Qt::MiddleButton )qDebug() << "Mouse middle pressed!";//event->pos(); event->x(); event->y(); 获取鼠标按键的 相对Widget位置: x坐标 和 y坐标
qDebug() << event->pos() << event->x() << event->y();//event->globalPos(); event->globalX(); event->globalY(); 获取鼠标按键的 相对屏幕位置: x坐标 和 y坐标
qDebug() << event->globalPos() << event->globalX() << event->globalY();
键盘事件
grabKeyboard() — 设置抓取按键:在非激活状态下也能抓取按键事件
setFocusPolicy(Qt::StrongFocus) — 设置强聚焦
void keyPressEvent(QKeyEvent *event); //键盘按下事件
void keyReleaseEvent(QKeyEvent *event); //键盘松开事件//判断按键按下的按键键
// enum Qt::Key
if ( event->key() == Qt::Key_A )qDebug() << "A pressed";
else if ( event->key() == Qt::Key_Space )qDebug() << "Space pressed";
else if ( event->key() == Qt::Key_Return ) //主要按键区 EnterqDebug() << "Return pressed";
else if ( event->key() == Qt::Key_Enter ) //数字功能区 EnterqDebug() << "Enter pressed";
elseqDebug() << "Other pressed";
QWheelEvent:滚轮事件
void wheelEvent(QWheelEvent *event); //鼠标滚轮事件//获取鼠标上滚还是下滚
qDebug() << event->angleDelta() << event->delta();
if( event->delta() > 0 )qDebug() << "Mouse up";
elseqDebug() << "Mouse down";
QCloseEvent:关闭事件
void closeEvent(QCloseEvent *event); //关闭事件
void resizeEvent(QResizeEvent *event); //改变窗口大小事件
void hideEvent(QHideEvent *event); //隐藏窗口事件 -
QTimerEvent:超时事件
void timerEvent(QTimerEvent *event); //定时器事件//启动系统定时器,当超时时自动触发 定时器事件
startTimer(1000);
QEvent 中:事件过滤器
(只对关注的事件进行处理)
le1 = new QLineEdit;
le1->installEventFilter(this); //安装事件过滤器(关注)protected:
bool eventFilter(QObject *watched, QEvent *event); //重写事件过滤器
参数:
watched:产生事件的对象
event: 产生的事件
返回值:
true:事件已被处理
false: 事件未被处理bool Widget::eventFilter(QObject *watched, QEvent *event)
{//判断是否是想要关注的对象if( watched == le1 || watched == le2 || watched == le3 || watched == pb1 || watched == pb2){//判断是否是想要关注的事件:事件类型是键盘按下事件if( event->type() == QEvent::KeyPress ){//获取按键按下的键:继承关系间,父类 -> 子类,转换函数QKeyEvent *e = static_cast<QKeyEvent *>(event);if(e->key() == Qt::Key_Up){this->focusPreviousChild(); //聚焦到上一个子对象上return true;}else if(e->key() == Qt::Key_Down){this->focusNextChild(); //聚焦到下一个子对象上return true;}/* 按下 Enter 键,输出行编辑器内容 *///当产生的事件是行编辑器时,再判断按下的按键是否时 Enter 键if( watched == le1 || watched == le2 || watched == le3 ){if(e->key() == Qt::Key_Return){//继承关系,父类->子类QLineEdit *le = static_cast<QLineEdit *>(watched);qDebug() << le->text();}}}}return QWidget::eventFilter(watched, event); //事件未处理,返回父类事件过滤器处理
}
QPaintEvent:绘图事件
update(); //刷新,会触发绘图事件。在pixmap作画,不会消失
#include <QPainter> //“画家”
#include <QPen> //“画笔”
#include <QBrush> //“刷子”
protected:
//绘图事件:当界面需要重绘
void paintEvent(QPaintEvent *event);
QPainter p(this); //定义一个 "画家"
QPen pen(Qt::red); //创建画笔,并设置画笔颜色
pen.setWidth(2); //设置画笔粗细
pen.setColor(Qt::blue); //设置画笔颜色
p.setPen(pen); //设置”画家“使用的"画笔"p.drawPoint(66, 66); //画点
p.drawPoint(QPoint);
p.drawLine(QPoint(3, 3), QPoint(200, 300)); //连线
p.drawRect(100, 100, 50, -100); //绘制矩形 x,y,w,h
p.drawEllipse(QPoint(66, 66), 66, 50); //绘制椭圆:圆心,x半径,y半径
p.drawText(QPoint(200, 200), "Hello Qt"); //写字
//画图片
QImage img = QImage("./1.jpg");
img = img.scaled(200,200, Qt::KeepAspectRatio, Qt::SmoothTransformation);
p.drawPixmap(this->width()/2,this->height()/2,QPixmap(QPixmap::fromImage(img)));p.translate(this->width()/2, this->height()/2); //"画家"移动,更新坐标系原点位置
p.rotate(150); //"画家"转向,旋转坐标系 150°(顺时针)
QThread:线程
//定义线程:继承QThread类,重写run方法
myThread *thread = new myThread; //创建线程
thread->start(); //启动线程
thread->terminate(); //结束线程void msleep(unsigned long msecs)
void sleep(unsigned long secs)
void usleep(unsigned long usecs)//重写run方法
protected:void run();public slots:void quit();void start();void terminate();signals:void finished();void started();
线程通信 – QMutex:互斥锁
定义全局变量 QMutex mutex1;
外部引用 extern QMutex mutex1;mutex1.lock(); //上锁
mutex1.unlock(); //解锁
线程通信 – QSemaphore:信号量
二值信号量、计数信号量
定义全局变量 QSemaphore sem1;
外部引用 extern QSemaphore sem1;;sem1.acquire(); //申请资源 P操作
sem1.release(); //释放资源 V操作
网络相关
QUdpSocket:UDP套接字
Pro文件中添加 network 模块
创建套接字:创建Udp套接字对象
绑定本机地址和端口:bind(QHostAddress, quint16);
发送数据:writeDatagram(QByteArray, QHostAddress, quint16);
接收数据:readDatagram(QByteArray, QHostAddress *, quint16 *);
#include <QUdpSocket> //Udp套接字
#include <QHostAddress> //IP地址
QUdpSocket *udpSocket;
使用这个类最常见的方法是使用bind()绑定到地址和端口
if( ! udpSocket->bind(QHostAddress::AnyIPv4, 8848) )
然后调用writeDatagram()和readDatagram() / receiveDatagram()来传输数据。
udpSocket->writeDatagram(str.toLatin1(), ip, port);
udpSocket->readDatagram(buf, sizeof(buf), &ip, &port);
如果您想使用标准的QIODevice函数read(), readLine(), write()等,您必须首先通过调用 connectToHost()将套接字直接连接到对等体。
每当一个数据报被写入网络时,套接字都会发出bytesWritten()信号。
如果只是想发送数据报,则不需要调用bind()。
每当数据报到达时,都会发出readyRead()信号。
在这种情况下,hasPendingDatagrams()返回true。
//当有数据可收时,触发readRead()信号,绑定槽进行接收数据操作
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(recv_data()));
//也可以 while (udpSocket->hasPendingDatagrams()) 时进行接收数据操作
注意:应该在接收readyRead()信号时读取传入的数据报,否则将不会为下一个数据报发出该信号。
QTcpSocket:tcp通信套接字
Pro文件中添加 network 模块
创建套接字:创建tcp套接字对象
绑定本机地址和端口:bind(QHostAddress, quint16);
连接服务器:connectToHost(QHostAddress, quint16);
发送数据:write
接收数据:read/readAll
#include <QTcpSocket> //Tcp协议
#include <QHostAddress> //IP地址//主动连接服务器
tcpSocket->connectToHost(ip, port.toUShort());
tcpSocket->close();//关闭套接字
tcpSocket->write(str.toLatin1());
QByteArray data = tcpSocket->readAll();signals:connected(); --- 当连接成功时disconnected(); --- 当连接断开时readyRead(); --- 当有数据可收时//当连接成功时,触发connected()信号
connect(tcpSocket, SIGNAL(connected()), this, SLOT(show_connected()));
//当断开连接时,触发disconnected()信号
connect(tcpSocket, SIGNAL(disconnected()), this, SLOT(show_disconnected()));
//当有数据可接收时,触发信号readRead()
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(recv_dataa()));
QTcpServer:tcp连接套接字
Pro文件中添加 network 模块
创建套接字:创建tcp套接字对象
绑定+监听:listen(QHostAddress, quint16); //IP地址和端口号//当有客户端连接服务器是,触发newConnection()信号
connect(tcpServer, SIGNAL(newConnection()), this, SLOT());//当有等待的连接
if( tcpServer->hasPendingConnections() )//接收连接,生成tcp通信套接字
tcpSocket = tcpServer->nextPendingConnection();tcpSocket->bytesAvailable(); --- 获取可收的字节数
tcp并发服务器:
//继承QTcpServer类,重写虚函数 incomingConnection(qintptr socketDescripter);
//当有新的连接进来时,会自动进入,成功连接生成通信套接字描述符
fd = socketDescripter;
tcpSocket->setSocketDescripter(fd); //设置通信套接字描述符
tcpSocket->waitForReadyRead(-1); //等待有数据可读
接收数据
if ( data.isEmpty() ) 客户端退出连接
tcpSocket->peerAddress().toString(); --- 获取发送方的ip地址tcpSocket->close();
tcpSocket->deleteLater(); //删除
QPixmap
QPixmap *pixmap = new QPixmap(800, 600); //创建一张空白图片
pixmap = new QPixmap("Filename");
pixmap->fill(); //填充白色
QFile:文件相关
windows 打开文件,默认为文本流,‘\n’ 为 ‘\r’+‘\n’
QFile file("../file/1.txt");
if(file.exists()) //判断文件是否存在
file.bytesAvailable(); //可用字节数(可读字节数)
file.size(); //文件大小
QString errorString() --- 获取错误信息
atEnd() --- 判断是否到达文件末尾
QByteArray data = file.readAll(); //读取全部
QByteArray data = file.read(1); //读取一个字节
QByteArray data = file.readLine(); //读取一行
write() --- 写入数据
open() --- 打开文件: QIODevice::ReadOnly, ReadWrite,Append,Truncate.
close() --- 关闭文件
file.seek(0); //定位(lseek/fseek)
file.link("1.lnk"); //生成快捷方式,文件名以 .lnk为后缀
/******************e.g.****************/QFile file(filename); //创建文件对象
if( !file.open(QIODevice::ReadOnly | QIODevice::Text) ) //以只读方式开发文件
{QString str = filename + ": " + file.errorString(); //获取错误信息QMessageBox::warning(this, "警告", str); //弹出警告框return;
}//读取文件内容
while( !file.atEnd() ) //判断是否读取到文件末尾
{QByteArray data = file.readAll(); //读取文件所有内容te->setText(data); //写入文本编辑器
}//将文本编辑器的内容写入文件中
QString str = te->toHtml(); //带格式的内容
file.write(str.toStdString().c_str(), str.length()); //类型转换 QString -> string -> char *file.close(); //关闭文件
QFileInfo:文件信息
QFileInfo finfo("../file/1.txt");
if(finfo.exists()) //判断文件是否存在
finfo.size(); //获取文件大小isDir() --- 判断是目录
isHidden() --- 判断是隐藏文件
if( finfo.isFile() ) //判断是否是普通文件//获取文件的创建日期 转为String类型
finfo.created().toString("yyyy-MM-dd hh:mm:ss A ddd");finfo.absoluteFilePath(); //获取文件的绝对路径
finfo.absolutePath(); //获取目录名,返回QString//获取文件所在目录
QDir dir = finfo.absoluteDir(); //返回 QDir
QDir:目录相关
cd(QString) --- 切换工作目录
cdUp() --- 上一级//设置过滤方式 enum QDir::Filter
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);//设置排序, 按文件大小,逆序 enum QDir::SortFlag
dir.setSorting(QDir::Size | QDir::Reversed);QFileInfoList list = dir.entryInfoList(); //读取目录下的所有文件
std::cout << " Bytes Filename" << std::endl;
for (int i = 0; i < list.size(); ++i)
{ //遍历每一个文件QFileInfo fileInfo = list.at(i);std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10) //文件大小.arg(fileInfo.fileName())); //文件名std::cout << std::endl;
}
QWidget 相关
QWidget
show() ---- 显示
hide() ---- 隐藏
close() ---- 关闭
setFixedSize(int w, int h) ---- 设置固定大小
setFixedWidth(int w) ---- 设置固定宽度
setFixedHeight(int h) ---- 设置固定高度
setMaximunSize(int w, int h); //设置最大尺寸
setMinimunSize(int w, int h); //设置最小尺寸
setWindowsTitle(QString); //设置窗口标题
setWindowsIcon(QIcon); // 设置窗口的图标
QPushButton: 按钮
QString text() --- 获取按钮上的内容
setText(QString) --- 设置按钮上的内容
SIGNAL:clicked() ---- 点击pressed() ---- 按下released() ---- 松开
setEnabled(bool) --- 使能/失能 按钮,默认使能按钮
setFont(QFont) --- 设置字体
//字体对象:字体名称 字体大小 加粗
QFont font("Times", 20, QFont::Bold);
setFlat(bool) --- 设置按钮透明
QLineEdit: 行编辑器
QString text() --- 获取内容
setText(QString) --- 设置内容
setMaxLength(int) --- 设置最大长度
setAlignment(Qt::Alignment) ---- 设置对齐方式
setFont(QFont) --- 设置字体
setEchoMode(QLineEdit::Passwd) --- 设置加密显示, QLineEdit::Normal -正常显示
SIGNAL:textChanged(QString) --- 当内容改变时
QCheckBox: 复选框
isChecked() ---- 判断是否选中
SIGNAL:clicked()
QRadioButton: 单选按钮
isChecked ---- 判断是否被勾选
SIGNAL:clicked()
QGroupBox: 分组框
setLayout(QLayout *) --- 添加布局
QLabel: 标签
setText(QString) --- 设置内容
setPixmap(QPixmap) --- 设置图片
setScaledContents(bool) --- 设置自适应
QFileDialog: 文件对话框
QString QFileDialog::getOpenFileName() --- 打开文件对话框,获取选中的文件名
QStringList QFileDialog::getOpenFileNames() --- 打开文件对话框,获取选中的多个文件名
//过滤 "ALL (*);; Image (*.jpg *.bmp *.png)")QString QFileDialog::getSaveFilename() --- 获取保存的文件名
QDir QFileDialog::getOpenDirectory() --- 获取打开的目录名

QInputDialog 输入对话框
文本输入、整型输入、浮点型输入
QString QInputDialog::getText() — 获取输入的字符串 QLineEdit
int QInputDialog::getInt() — 获取输入的整数 QSpinBox
double QInputDialog::getDouble() — 获取输入的浮点数 QDoubleSpinBox
/******e.g.*******/
bool ok;
// 文本输入
QString str = QInputDialog::getText(this, "Input", "输入名字: ", QLineEdit::Normal,\"李四", &ok);
if( str.isEmpty() || !ok )return;//整型输入
int num = QInputDialog::getInt(this, "Input", "学号: ", 0, 0, \100, 1, &ok);
if( !ok )return;

QMessageBox 消息框
exec() — 模态对话框
show() — 非模态对话框
QMessageBox::question() — 问题消息框
QMessageBox::warning() — 警告框
QMessageBox::information() — 信息框
QMessageBox::about() — 关于
自定义框:
/*************e.g. 自定义框*******************/
QMessageBox msgBox; //自定义框
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setButtonText(QMessageBox::Discard, "not save");//自定义按钮文字
msgBox.setDefaultButton(QMessageBox::Save); //设置默认选中int ret = msgBox.exec();//模态显示对话框 -- 未结束当前窗口前不能访问其他窗口switch (ret) {case QMessageBox::Save:qDebug() << "save";break;case QMessageBox::Discard:qDebug() << "d save";break;case QMessageBox::Cancel:qDebug() << "cancel";break;default:qDebug() << "nnnnn";break;
}
/*******************************/
QMessageBox::information();
QMessageBox::warning(this, "Warning", "Empty!!");
QMessageBox::question(this, "Question", "???");
QMessageBox::aboutQt(this, "关于Qt");

QFontDialog 字体对话框
QFont QFontDialog::getFont() — 获取选中的字体
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
if(!ok)return;

QColorDialog 颜色对话框
QColor QColorDialog::getColor() — 获取选中的颜色
QColor color = QColorDialog::getColor();
if ( color.isValid() ) //判断是否有效
{//te->setTextColor(color); //改变选中的字体颜色,和之后输入的字体颜色
}

自定义对话框 class myDialog : public QDialog
- Q_OBJECT
QTextEdit:文本编辑器
QString toHtml() --- 获取带格式的内容
QString toPlainText() --- 获取纯文本
QListWidget:列表部件
#include <QListWidgetItem> //列表部件内复杂itemaddItem(QListWidgetItem *item) --- 添加复杂item
addItems(QStringList list) --- 添加列表
addItem(QString) --- 添加条目
int currentRow() --- 当前选中的item位置
QListWidgetItem *item takeItem( int pos ) --- 取走pos处的item
QComboBox:下拉条(下拉列表框、组合框)
addItem(QString) --- 添加条目
addItem(QListWidgetItem *item) --- 添加复杂item
addItems(QStringList list) --- 添加条目列表
insertItem(int index, 条目) --- 插入item
setCurrentIndex(int index) --- 设置当前item
SIGNAL:currentIndexChanged(int index) --- 当选择不同的item改变时currentIndexChanged(const QString &text) --- /改变当前选中
QStackedWidget:堆叠窗口
addWidget(QWidget *) --- 添加页面,第0页开始
setCurrentIndex(int row) --- 设置当前页 为第row页
int currentIndex() --- 获取当前页
int count() --- 获取总页数
QSpinBox:自旋框(整数)
setValue(int) --- 设置初始值
setRange(int min, int max) --- 设置范围
setMaximum(23) --- 设置最大值
setMinimum(-10) --- 设置最小值
setReadOnly(bool) --- 设置只读,只能通过代码修改
setSingleStep(2) --- 设置步长
setPrefix("距离: ") --- 设置前缀
setSuffix("米") --- 设置后缀
SIGNAL:valueChanged(int) --- 当值改变时valueChanged(QString)
QDoubleSpinBox:数字设定框(浮点数)
setValue(double) --- 设置初始值
setRange(-6.2, 6.9) --- 设置范围
setReadOnly(true) --- 设置只读,只能通过代码修改
setSingleStep(double) --- 设置步长
setPrefix("距离: ") --- 设置前缀
setSuffix("米") --- 设置后缀
setDecimals(2) --- 设置精度
SIGNAL:valueChanged(double) --- 当值改变时valueChanged(QString)
QSlider:滑动条
setValue(50) --- 设置值
setRange(0, 100) --- 范围
setOrientation(Qt::Horizontal) --- 设置水平放置, Qt::vertical 垂直放置
QScrollBar:滚动条
setValue(50) --- 初值
setRange(0, 100) --- 范围
setOrientation(Qt::Horizontal) --- 设置水平放置, Qt::vertical 垂直放置
QProgressBar:进度条
setValue(50) --- 初值
setRange(0, 100) --- 范围
QTime:时间
addSecs() --- 增加时间:秒
addMsecs() --- 怎加时间:毫秒
hour() --- 获取小时
minute() --- 获取分钟
second() --- 获取秒数static public function:QTime t = QTime::currentTime() --- 获取当前时间
QTimeEdit:时间编辑器
setTime(QTime) --- 设置时间
setDisplayFormat("hh:mm:ss") --- 设置显示格式
QDateTime:日期
static public functions:QDateTime dt = QDateTime::currentDateTime() --- 获取当前日期
QDateTimeEdit:日期编辑器
setDateTime(QDataTime) --- 设置日期
setDisplayFormat("yyyy-MM-dd hh::mm:ss A ddd") --- 年-月-日 时:分:秒 上(下)午 星期
QTimer:定时器
start(1000) --- 启动定时器,毫秒单位,1s = 1000ms = 1000000us
stop() --- 停止定时器
SIGNAL:timeout() --- 超时信号
QMainWindow 主窗口 – 相关
QMenu 菜单栏
#include <QMenuBar>
#include <QAction>QMenu *filemenu, *editmenu;
//filemenu = new QMenu("文件"); //创建 “文件“ 菜单栏
//editmenu->addMenu(QMenu *); //添加菜单//创建并添加菜单栏
filemenu = menuBar()->addMenu("文件");
editmenu = menuBar()->addMenu("编辑"); //添加动作: 新建和打开
QAction *newAct, *open;
//添加动作
newAct = new QAction("新建");
newAct->setIcon(QIcon(":/1.ico")); //设置图标
newAct->setShortcut(QKeySequence::New); //设置快捷键
setShortcut( QKeySequence( "Ctrl+N" ) ) --- 设置自定义快捷键
newAct->setStatusTip("新建文件......"); //状态栏提示newAct->setCheckable(true);//设置 开启可勾选
newAct->setChecked(true); //设置默认勾选open = new QAction("打开");
open->setIcon(QIcon(":/1.ico")); //设置图标
open->setShortcut(QKeySequence::Open); //设置快捷键
newAct->setStatusTip("打开文件......"); //状态栏提示filemenu->addAction(newAct);
filemenu->addAction(open); --- 添加动作
filemenu->addMenu(QMenu *) --- 添加菜单//添加多个动作
QList <QAction *> formatActs = {fontAct, colorAct};
formatMenu = menuBar()->addMenu("格式");
formatMenu->addActions(formatActs);SIGNAL:triggered() --- 触发信号
QToolBar 工具栏
QToolBar *filetool, *edittool;
//创建工具栏
filetool = addToolBar("文件");
//添加动作
filetool->addAction(newAct);
filetool->addAction(open);
QStatusBar 状态栏
QStatusBar *sbar;
//状态栏
sbar = statusBar();
sbar->addWidget(QWidget *widget); //添加窗口
中央窗口
//设置中央窗口
setCentralWidget(QWidget *widget);
一些操作
图片等比例缩放显示
#include <QPixmap>
#include <QLabel>
#include <QImage>将图片使用image打开,通过pixmap,放到label标签中
// 声明私有变量 QLabel *l;
l = new QLabel(this);
l->setFixedSize(500, 500);QImage img = QImage("./1.png"); //QPixmap pixmap = QPixmap("./1.png");
//参数:大小,等比例缩放,平滑处理
img = img.scaled(l->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
//pixmap = pixmap.scaled();l->setPixmap(QPixmap::fromImage(img));
//l->setPixmap(pixmap);
图片标签 和 文字标签居中 注意
//窗口大小
this->setFixedSize(1600, 900);l = new QLabel();
l->setFixedSize(500, 300);QImage img = QImage("./1.png");
img = img.scaled(500, 500, Qt::KeepAspectRatio, Qt::SmoothTransformation);QPixmap pixmap = QPixmap(QPixmap::fromImage(img));
l->setPixmap(pixmap);l1 = new QLabel("This is a Picture.");//控件label l1内容 居中
l1->setAlignment(Qt::AlignCenter);vbox1 = new QVBoxLayout;
vbox1->addWidget(l);
vbox1->addWidget(l1);//垂直布局整体 居中
vbox1->setAlignment(Qt::AlignCenter);setLayout(vbox1);




















