- 堆叠窗口 需要放在布局中。
- “程序异常结束”:声明了私有指针变量,直接使用(操作野指针)
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 (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(); //输出第一列的信息
}
QPushButton,QLineEdit{
//属性不区分大小写
color:red;
background-color:white;
}
//:pressed按下时才触发
ui->pb->setStyleSheet(QString("QPushButton:pressed{
color:rgb(255, 0, 0)
}"));
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 ) //主要按键区 Enter
qDebug() << "Return pressed";
else if ( event->key() == Qt::Key_Enter ) //数字功能区 Enter
qDebug() << "Enter pressed";
else
qDebug() << "Other pressed";
void wheelEvent(QWheelEvent *event); //鼠标滚轮事件
//获取鼠标上滚还是下滚
qDebug() << event->angleDelta() << event->delta();
if( event->delta() > 0 )
qDebug() << "Mouse up";
else
qDebug() << "Mouse down";
void closeEvent(QCloseEvent *event); //关闭事件
void resizeEvent(QResizeEvent *event); //改变窗口大小事件
void hideEvent(QHideEvent *event); //隐藏窗口事件 -
void timerEvent(QTimerEvent *event); //定时器事件
//启动系统定时器,当超时时自动触发 定时器事件
startTimer(1000);
(只对关注的事件进行处理)
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(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(watched);
qDebug() << le->text();
}
}
}
}
return QWidget::eventFilter(watched, event); //事件未处理,返回父类事件过滤器处理
}
update(); //刷新,会触发绘图事件。在pixmap作画,不会消失
#include
#include
#include
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类,重写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 mutex1;
外部引用 extern QMutex mutex1;
mutex1.lock(); //上锁
mutex1.unlock(); //解锁
二值信号量、计数信号量
定义全局变量 QSemaphore sem1;
外部引用 extern QSemaphore sem1;;
sem1.acquire(); //申请资源 P操作
sem1.release(); //释放资源 V操作
Pro文件中添加 network 模块
创建套接字:创建Udp套接字对象
绑定本机地址和端口:bind(QHostAddress, quint16);
发送数据:writeDatagram(QByteArray, QHostAddress, quint16);
接收数据:readDatagram(QByteArray, QHostAddress *, quint16 *);
#include
#include
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()信号时读取传入的数据报,否则将不会为下一个数据报发出该信号。
Pro文件中添加 network 模块
创建套接字:创建tcp套接字对象
绑定本机地址和端口:bind(QHostAddress, quint16);
连接服务器:connectToHost(QHostAddress, quint16);
发送数据:write
接收数据:read/readAll
#include //Tcp协议
#include //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()));
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 *pixmap = new QPixmap(800, 600); //创建一张空白图片
pixmap = new QPixmap("Filename");
pixmap->fill(); //填充白色
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 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
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;
}
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); // 设置窗口的图标
QString text() --- 获取按钮上的内容
setText(QString) --- 设置按钮上的内容
SIGNAL:
clicked() ---- 点击
pressed() ---- 按下
released() ---- 松开
setEnabled(bool) --- 使能/失能 按钮,默认使能按钮
setFont(QFont) --- 设置字体
//字体对象:字体名称 字体大小 加粗
QFont font("Times", 20, QFont::Bold);
setFlat(bool) --- 设置按钮透明
QString text() --- 获取内容
setText(QString) --- 设置内容
setMaxLength(int) --- 设置最大长度
setAlignment(Qt::Alignment) ---- 设置对齐方式
setFont(QFont) --- 设置字体
setEchoMode(QLineEdit::Passwd) --- 设置加密显示, QLineEdit::Normal -正常显示
SIGNAL:
textChanged(QString) --- 当内容改变时
isChecked() ---- 判断是否选中
SIGNAL:
clicked()
isChecked ---- 判断是否被勾选
SIGNAL:
clicked()
setLayout(QLayout *) --- 添加布局
setText(QString) --- 设置内容
setPixmap(QPixmap) --- 设置图片
setScaledContents(bool) --- 设置自适应
QString QFileDialog::getOpenFileName() --- 打开文件对话框,获取选中的文件名
QStringList QFileDialog::getOpenFileNames() --- 打开文件对话框,获取选中的多个文件名
//过滤 "ALL (*);; Image (*.jpg *.bmp *.png)")
QString QFileDialog::getSaveFilename() --- 获取保存的文件名
QDir QFileDialog::getOpenDirectory() --- 获取打开的目录名
文本输入、整型输入、浮点型输入
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;
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");
QFont QFontDialog::getFont() — 获取选中的字体
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
if(!ok)
return;
QColor QColorDialog::getColor() — 获取选中的颜色
QColor color = QColorDialog::getColor();
if ( color.isValid() ) //判断是否有效
{
//te->setTextColor(color); //改变选中的字体颜色,和之后输入的字体颜色
}
QString toHtml() --- 获取带格式的内容
QString toPlainText() --- 获取纯文本
#include //列表部件内复杂item
addItem(QListWidgetItem *item) --- 添加复杂item
addItems(QStringList list) --- 添加列表
addItem(QString) --- 添加条目
int currentRow() --- 当前选中的item位置
QListWidgetItem *item takeItem( int pos ) --- 取走pos处的item
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) --- /改变当前选中
addWidget(QWidget *) --- 添加页面,第0页开始
setCurrentIndex(int row) --- 设置当前页 为第row页
int currentIndex() --- 获取当前页
int count() --- 获取总页数
setValue(int) --- 设置初始值
setRange(int min, int max) --- 设置范围
setMaximum(23) --- 设置最大值
setMinimum(-10) --- 设置最小值
setReadOnly(bool) --- 设置只读,只能通过代码修改
setSingleStep(2) --- 设置步长
setPrefix("距离: ") --- 设置前缀
setSuffix("米") --- 设置后缀
SIGNAL:
valueChanged(int) --- 当值改变时
valueChanged(QString)
setValue(double) --- 设置初始值
setRange(-6.2, 6.9) --- 设置范围
setReadOnly(true) --- 设置只读,只能通过代码修改
setSingleStep(double) --- 设置步长
setPrefix("距离: ") --- 设置前缀
setSuffix("米") --- 设置后缀
setDecimals(2) --- 设置精度
SIGNAL:
valueChanged(double) --- 当值改变时
valueChanged(QString)
setValue(50) --- 设置值
setRange(0, 100) --- 范围
setOrientation(Qt::Horizontal) --- 设置水平放置, Qt::vertical 垂直放置
setValue(50) --- 初值
setRange(0, 100) --- 范围
setOrientation(Qt::Horizontal) --- 设置水平放置, Qt::vertical 垂直放置
setValue(50) --- 初值
setRange(0, 100) --- 范围
addSecs() --- 增加时间:秒
addMsecs() --- 怎加时间:毫秒
hour() --- 获取小时
minute() --- 获取分钟
second() --- 获取秒数
static public function:
QTime t = QTime::currentTime() --- 获取当前时间
setTime(QTime) --- 设置时间
setDisplayFormat("hh:mm:ss") --- 设置显示格式
static public functions:
QDateTime dt = QDateTime::currentDateTime() --- 获取当前日期
setDateTime(QDataTime) --- 设置日期
setDisplayFormat("yyyy-MM-dd hh::mm:ss A ddd") --- 年-月-日 时:分:秒 上(下)午 星期
start(1000) --- 启动定时器,毫秒单位,1s = 1000ms = 1000000us
stop() --- 停止定时器
SIGNAL:
timeout() --- 超时信号
#include
#include
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 formatActs = {fontAct, colorAct};
formatMenu = menuBar()->addMenu("格式");
formatMenu->addActions(formatActs);
SIGNAL:
triggered() --- 触发信号
QToolBar *filetool, *edittool;
//创建工具栏
filetool = addToolBar("文件");
//添加动作
filetool->addAction(newAct);
filetool->addAction(open);
QStatusBar *sbar;
//状态栏
sbar = statusBar();
sbar->addWidget(QWidget *widget); //添加窗口
//设置中央窗口
setCentralWidget(QWidget *widget);
#include
#include
#include
将图片使用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);