目录
1.信号槽(按钮点击触发事件)
2.工具栏、菜单栏(代码添加方式)
3.资源文件(以图片为例)
4.控件学习
5.鼠标事件
6.QFile文件读写操作
1.信号槽(按钮点击触发事件)
信号连接的格式
参数1:信号的发送者 参数2:发送的信号(函数的地址) 参数3: 信号的接收者 参数4: 处理的槽函数
1)在发送者的头文件中编写信号signal
signals:
//自定义信号,写在signal下
//返回值是void,只需要声明,不需要实现
//可以有参数,可以重载
void hungry();
void hungry(QString foodName);
2)在接收者的头文件中编写槽函数slot
public slots:
//返回值是void,需要声明,也需要实现,也可以有参数,可以发生重载
void treat();
void treat(QString foodName);
};
3)在窗口类的头文件中定义发送者、接收者和槽函数声明
#ifndef WIDGET_H #define WIDGET_H #include#include "teacher.h" #include "student.h" namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; Teacher * zt; Student * st; void classIsOver(); }; #endif // WIDGET_H
4)在窗口类的cpp文件中创建连接,实现槽函数(接收者的cpp文件也要实现槽函数)
#include "widget.h" #include "ui_widget.h" #include//Teacher 类 老师类 //Student 类 学生类 //下课,老师触发信号:饿了,学生响应信号:请客 Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //创建一个老师对象 this->zt=new Teacher(this); //创建一个学生对象 this->st=new Student(this); // //创建连接 // connect(zt,&Teacher::hungry,st,&Student::treat); // //下课 // classIsOver(); //连接带参数的信号和槽(出现重载的情况) void(Teacher:: *teacherSignal)(QString)=&Teacher::hungry; void(Student:: *studentSlot)(QString)=&Student::treat; connect(zt,teacherSignal,st,studentSlot); classIsOver(); //按钮控制下课 QPushButton *btn1 = new QPushButton; btn1->setParent(this); btn1->setText("下课1"); btn1->move(100,100); connect(btn1,&QPushButton::clicked,this,&Widget::classIsOver); //信号连接信号 QPushButton *btn2 = new QPushButton; btn2->setParent(this); btn2->setText("下课2"); btn2->move(100,200); void(Teacher:: *teacherSignal2)(void)=&Teacher::hungry; void(Student:: *studentSlot2)(void)=&Student::treat; connect(zt,teacherSignal2,st,studentSlot2); connect(btn2,&QPushButton::clicked,zt,teacherSignal2); } void Widget::classIsOver(){ emit zt->hungry("宫保鸡丁"); } Widget::~Widget() { delete ui; }
2.工具栏、菜单栏(代码添加方式)
#include "mainwindow.h"
#include
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent){
resize(600,400);
//1.菜单栏创建(最多有一个)
QMenuBar * bar = menuBar();
//将菜单栏放在窗口中
setMenuBar(bar);
//创建菜单
QMenu * file=bar->addMenu("文件");
QMenu * edit=bar->addMenu("编辑");
//创建菜单项
QAction *newAction=file->addAction("新建");
//添加分隔符
file->addSeparator();
QAction *openAction=file->addAction("打开");
//工具栏创建(可以有多个)
QToolBar * tool = new QToolBar();
addToolBar(Qt::LeftToolBarArea,tool);
//工具栏中设置内容、添加控件
tool->addAction(newAction);
tool->addAction(openAction);
QPushButton *btn = new QPushButton("aa",this);
tool->addWidget(btn);
}
MainWindow::~MainWindow()
{
delete ui;
}
3.资源文件(以图片为例)
将图片文件拷贝至项目位置下
右键项目->添加新文件->Qt->Qt resourse File
open in editor 编辑资源
添加资源 添加文件
使用 “:+ 前缀名 + 文件名 ”
将图片文件拷贝至项目位置下
右键项目->添加新文件->Qt->Qt resourse File
open in editor 编辑资源
添加资源 添加文件
使用 “:+ 前缀名 + 文件名 ”
资源文件过大时,在工程PRO文件中,添加:
CONFIG += resources_big
4.控件学习
1)Table Widget控件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//TableWidget控件
//设置列数
ui->tableWidget->setColumnCount(3);
//设置表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(5);
//设置正文
QList nameList;
nameList<<"张三"<<"李四"<<"王二"<<"麻子"<<"赵六";
QList sexList;
sexList<<"男"<<"女"<<"女"<<"男"<<"男";
for(int i=0;i<5;i++){
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+18)));
}
}
MainWindow::~MainWindow()
{
delete ui;
}
2)Stack Widget控件
#include "mainwindow.h" #include "ui_mainwindow.h" #includeMainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //栈控件的使用 //scrollArea按钮 connect(ui->scrollArea_btn,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(0); }); //toolBox按钮 connect(ui->toolBox_btn,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(1); }); //TabWidget按钮 connect(ui->tabWidget_btn,&QPushButton::clicked,[=](){ ui->stackedWidget->setCurrentIndex(2); }); } MainWindow::~MainWindow() { delete ui; }
3)自定义控件封装
创建Qt设计界面类
在.ui文件中,拉取所想要封装的控件,可在.h文件和.cpp文件中编写信号和槽
在主widget中使用该自定义控件:拖拽一个Widget,点击"提升为",点击"添加",点击"提升"
5.鼠标事件
新建类,以封装鼠标对某个控件的操作方法
例:myLable.cpp文件
#include "mylable.h" #include#include myLable::myLable(QWidget *parent) : QLabel(parent) { } //鼠标进入事件 void myLable::enterEvent(QEvent *event){ qDebug()<<"鼠标进入了"; } //鼠标离开事件 void myLable::leaveEvent(QEvent *event){ qDebug()<<"鼠标退出了"; } //鼠标按下事件 void myLable::mousePressEvent(QMouseEvent *event){ QString str=QString("鼠标按下了 x = %1 y= %2").arg(event->x()).arg(event->y()); qDebug()< 6.QFile文件读写操作
类似C语言,唯套路耳
#include "widget.h" #include "ui_widget.h" #include#include Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //点击选取文件按钮,弹出文件对话框 connect(ui->pushButton,&QPushButton::clicked,[=](){ QString path=QFileDialog::getOpenFileName(this,"打开文件","C:\Users\qq102\Desktop\secret"); //将路径放入到lineEdit中 ui->lineEdit->setText(path); //读取内容放入到textEdit中 QFile file(path);//参数就是读取文件的路径 //设置打开方式 file.open(QIODevice::ReadOnly); QByteArray array = file.readAll(); //将读取到的数据放入textEdit中 ui->textEdit->setText(array); //对文件对象进行关闭 file.close(); //进行写文件 file.open(QIODevice::Append); file.write("shit"); file.close(); }); } Widget::~Widget() { delete ui; }



