Qt学习 - 总

Qt学习

学习中的错误

- 堆叠窗口 需要放在布局中。
- “程序异常结束”:声明了私有指针变量,直接使用(操作野指针)

常用快捷键

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值