QT
一、按钮
1.效果
2.代码
#include<QPushButton>//头文件
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
//方法1
QPushButton *btn=new QPushButton;
//btn->show();//以顶层方式显示
btn->setParent(this);//在myWidget窗口中
btn->setText("按钮");//显示文本
//方法2
QPushButton * btn2=new QPushButton("按钮2",this);
btn2->move(100,100);//移动按钮
resize(600,400);//重置按钮
setWindowTitle("窗口");//设置窗口标题
setFixedSize(600,400);//设置窗口固定大小
//参数:信号发送者 发送的信号(函数的地址) 信号接收者 处理的槽函数(函数地址)
connect(btn,&QPushButton::clicked,this,&QWidget::close);
//功能:点击btn按钮关闭窗口
}
二、自定义信号和槽
1.自定义信号: 写在signals下,void,需要声明,不需要实现,可以有参数,可重载。
2.槽: 写在public下,void,需要声明,需要实现,可有参数,可发生重载。
3.断开信号: disconnect
4.emit: 使用emit关键字发送信号
5.示例关键代码如下:
1.widget.cpp
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::hu,st,&Student::treat);
//调用函数
// classIsOver();
//带参数
//函数指针-》函数地址
void(Teacher::*ts)(QString)=&Teacher::xk;
void(Student::*ss)(QString)=&Student::treat;
connect(zt,ts,st,ss);
classIsOver();
}
void Widget::classIsOver()
{
//触发信号
//emit zt->xk();
emit zt->xk("计算机作业");
}
2.widget.h
#include <QWidget>
#include"teacher.h"
#include"student.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
Teacher *zt;
Student *st;
void classIsOver();
};
3.student.cpp
#include "student.h"
#include<qdebug>
void Student::treat()
{
qDebug()<<"下课";
}
void Student::treat(QString foodName)
{
//显示布置“foodName的内容”
// qDebug()<<"布置"<<foodName;
qDebug()<<"布置"<<foodName.toUtf8().data();
//QString ->chat *:先转成QByteArray再转chat*,消“”
}
4.teacher.h和student.h
class Teacher : public QObject
{
Q_OBJECT
public:
explicit Teacher(QObject *parent = nullptr);
signals:
//自定义信号,void,需要声明,不需要实现,可以有参数,可以重载
void xk();
void xk(QString foodName);
};
class Student : public QObject
{
Q_OBJECT
public:
explicit Student(QObject *parent = nullptr);
//槽函数:void,需要声明,需要实现,可有参数,可发生重载
void treat();
void treat(QString foodName);
signals:
};
6.效果图:
三、Lambda表达式
1.表达式
(1) [函数对象参数] (操作符重载函数参数) mutable->返回值{函数体}
(2) [] () {}()
2.函数对象参数
(1)空
(2)= : 值传递,所在作用范围内所有可见局部变量。
(3)&: 引用传递方式,所在作用范围内所有可见局部变量。
(4)this: 所在类中成员变量。
(5)a: 将a按值进行传递。
(6)&a: 将a按引用进行传递。
3.示例:
//将“下课”按钮-》"lambda"按钮
[=](){
btn->setText("lambda");
}();
//演示将(5)a按值传递
QPushButton *btn2=new QPushButton("a",this);
this->resize(600,400);
btn2->move(100,100);
[btn2](){
btn2->setText("lambda2");
//btn->setText("lambda");//’btn‘ is not captured
}();
//输出 ret=100
int ret=[]()->int{return 100;}();
qDebug()<<"ret="<<ret;
//利用lambda表达式,实现点击按钮,关闭窗口
QPushButton *btn3=new QPushButton;
btn3->setText("关闭");
btn3->move(100,0);
btn3->setParent(this);
connect(btn3,&QPushButton::clicked,this,[=](){
this->close();
emit zt->xk("计算机");
});
//结果:点击”关闭“按钮,窗口关闭并输出(布置 计算机)
四、QMainWindow
1.菜单栏
(1)效果:
(2)代码:
#include "mainwindow.h"
#include<QMenuBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
resize(600,400);
//创建菜单栏(最多只能有一个)
QMenuBar *bar=menuBar();
setMenuBar(bar);//将菜单栏放入窗口中
//创建菜单
QMenu *fMenu=bar->addMenu("文件");
QMenu *eMenu=bar->addMenu("编辑");
//创建菜单项(在菜单“文件”下)
fMenu->addAction("新建");
fMenu->addSeparator();//添加分割线
fMenu->addAction("打开");
}
2.工具栏
(1)效果:
(2)代码:
#include "mainwindow.h"
#include<QMenuBar>
#include<QToolBar>
#include<QDebug>
#include<QPushButton>
//工具栏(可以有多个)
QToolBar *tBar=new QToolBar(this);
//将工具栏放在窗口中的左边(Qt::LeftToolBarArea)
addToolBar(Qt::LeftToolBarArea,tBar);
//设置只允许左右停靠(默认在窗口中,工具栏可移动到四周停靠)
tBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置不允许浮动
tBar->setFloatable(false);
//设置不能移动(总开关)
tBar->setMovable(false);
//设置内容:1.与菜单栏写法一样
tBar->addAction("新建");
tBar->addSeparator();
tBar->addAction("打开");
//2.和上面菜单公用的写法
//QAction *newAction=fMenu->addAction("新建");
//QAction *openAction=fMenu->addAction("打开");
//tBar->addAction(newAction);
//tBar->addAction(openAction);
//添加控件
QPushButton *btn=new QPushButton("按钮",this);
tBar->addWidget(btn);//将按钮放入工具栏中
3.状态栏
(1)效果:
(2)代码:
#include<QStatusBar>
#include<QLabel>
#include<QDockWidget>
#include<QTextEdit>
//状态栏(最多一个)
QStatusBar *sBar=statusBar();
setStatusBar(sBar);//放入窗口中
//标签控件
QLabel *label=new QLabel("提示信息",this);
sBar->addWidget(label);
QLabel *label2=new QLabel("提示信息(右)",this);
sBar->addPermanentWidget(label2);//在右侧加入提示信息
//铆接部件(浮动窗口) 可以有多个
QDockWidget *dw=new QDockWidget("浮动窗口",this);
addDockWidget(Qt::BottomDockWidgetArea,dw);//位于核心/中心的下边
//设置浮动窗口只允许上下停靠
dw->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//设置中心部件(只能有一个)
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
五、界面文件
1.添加图标
1.前操作:
首先点击界面文件中XXX.ui进行界面设计,设计如下:
tips:工具栏添加首先只能为英文,需要在右下角框中、text后修改为中文。
2.图标添加:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// ui->actionnew->setIcon(QIcon("D:/Image/a"));//添加图标
//使用添加Qt资源
//1.复制需要的文件-》点击项目(.cpp)右键-》在Explorer中显示-》粘贴
//2.在Qt项目(总项目)中右键-》添加新文件-》Qt.Qt Resource File-》编辑信息并生产资源文件
//3.点击资源文件下的XXX.qrc的右键-》Open in Editor-》添加前缀(前缀:/ 或其他)-》添加文件(选种图片后点击打开)
//4.编译后可出现名为/的文件(图片在里面)
ui->actionnew->setIcon(QIcon(":/Image/a"));//格式为":+前缀名+文件名"
ui->actionopen->setIcon(QIcon(":/Image/b"));
}
MainWindow::~MainWindow()
{
delete ui;
}
3.效果图:
六、对话框
1.模态和非模态对话框
(1)效果:
(2)代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDialog>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//模态对话框(不可以对其他窗口操作,具有阻塞功能)
// QDialog dlg(this);
// dlg.resize(200,100);
// dlg.exec();
// qDebug()<<"模态对话框阻塞功能测试";
//非模态对话框(可以对其他窗口操作)
QDialog *dlg2=new QDialog(this);//防止窗口一闪而过
dlg2->resize(200,100);
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose);//防止内存泄漏
});
}
MainWindow::~MainWindow()
{
delete ui;
}
2.消息对话框
(1)提问对话框效果:
(2)代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDialog>
#include<QDebug>
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//消息对话框
//QMessageBox 静态成员函数
//参数:父亲 标题 提示内容 按键类型 默认关联回车按键
//1.错误对话框(框名为critical,内容为叉图标和错误文字)
//QMessageBox::critical(this,"critical","错误");
//2.信息对话框
//QMessageBox::information(this,"info","信息");
//3.提问对话框
//QMessageBox::question(this,"ques","提问");//(默认显示Yes和No按钮)
//显示Save和Cancel按钮,设置默认回车按键为Cancel
//返回值 也是StandardButton类型,利用返回值判断用户的输入
if(QMessageBox::Save ==QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
qDebug()<<"选择的是保存";
}
else
{
qDebug()<<"选择的是取消";
}
//4.警告对话框
// QMessageBox::warning(this,"warning","警告");
});
}
3.其他
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDialog>
#include<QDebug>
#include<QMessageBox>
#include<QColorDialog>
#include<QFileDialog>
#include<QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//其他对话框
//1.颜色对话框 QColor(r,g,b,透明度)
//返回值为颜色数值
// QColor col= QColorDialog::getColor(QColor(135,209,255));
// qDebug()<<"r="<<col.red()<<",g="<<col.green()<<",b"<<col.blue();
//2.文件对话框 参数:父亲 标题 默认打开路径 过滤文件格式
//点击新建,自动打开桌面显示过滤后的txt和文件夹
//返回值为 选取的路径
// QString str= QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\佳\\Desktop","(*.txt)");
// qDebug()<<str;
//3.字体对话框
bool f;
QFont font=QFontDialog::getFont(&f,QFont("宋体",36));
qDebug()<<"字体:"<<font.family().toUtf8().data()<<",字号:"<<font.pointSize()<<",是否加粗:"<<font.bold()<<",是否倾斜:"<<font.italic();
});
}
//QInputDialog :允许用户输入一个值,并将其值返回
//QMessageBox :模态对话框
//QPageSetupDialog :为打印机提供纸张相关的选项
//QPrintDialog :打印机配置
//QPrintPreviewDialog :打印预览
//QProgressDialog :显示操作过程
七、ui界面
1.按钮组
(1)QPushButton : 常用按钮
(2)QToolButton: 工具按钮可,用于显示图片
(3)radioButton: 单选按钮
(4)checkbox: 多选按钮,可监听状态
1.界面图:
2.有关代码:
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1.设置单选按钮,默认男
//自定义按钮名:rBtnMan
ui->rBtnMan->setChecked(true);
//选中"女"后,打印信息
connect(ui->rBtnWoman,&QRadioButton::clicked,[=](){
qDebug()<<"性别:女";
});
//2.多选按钮
//自定义按钮名:cBa
//输出:2(选中) 0(未选中)
//1:半选(需要在属性的tristate打勾)
connect(ui->cBa,&QCheckBox::stateChanged,[=](int state){
qDebug()<<state;
});
}
Widget::~Widget()
{
delete ui;
}
八、控件
1.QListWidget控件
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//利用listWidget写诗
//法1:
QListWidgetItem *item=new QListWidgetItem("长风破浪会有时");
//将一行诗放入到listWidget控件中
ui->listWidget->addItem(item);
item->setTextAlignment(Qt::AlignHCenter);//设置水平居中
//法2:(缺点:无法设置居中)
//QStringList QList<QString>
QStringList list;
list<<"长风破浪会有时"<<"直挂云帆济沧海";
ui->listWidget->addItems(list);
}
2.QTreeWidget树控件
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//treeWidget树控件使用
//1.设置水平头
ui->treeWidget->setHeaderLabels(QStringList()<<"诗人"<<"诗人介绍");
//2.创建根节点
QTreeWidgetItem *titem =new QTreeWidgetItem(QStringList()<<"唐");
QTreeWidgetItem *djitem =new QTreeWidgetItem(QStringList()<<"东晋");
QTreeWidgetItem *sitem =new QTreeWidgetItem(QStringList()<<"宋");
//3.加载顶层的节点(添加根节点到树控件上)
ui->treeWidget->addTopLevelItem(titem);
ui->treeWidget->addTopLevelItem(djitem);
ui->treeWidget->addTopLevelItem(sitem);
//4.追加子节点
QStringList poet1;
poet1<<"李白"<<"字太白,号青莲居士,诗仙";
QTreeWidgetItem *l1=new QTreeWidgetItem(poet1);
titem->addChild(l1);
}
3.QTableWidget控件
(1)效果图:
(2)代码:
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置列数
ui->tableWidget->setColumnCount(3);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(5);
//设置正文
//1.设置某个单元格
//ui->tableWidget->setItem(0,0, new QTableWidgetItem("李白"));
//2.整体设置
QStringList nameList;
nameList<<"李白"<<"杜甫"<<"陶渊明"<<"李贺"<<"李清照";
QList<QString> sexList;//等于QStringList
sexList<<"男"<<"男"<<"男"<<"男"<<"女";
for(int i=0;i<5;i++)
{
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));//1
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sexList.at(i)));//2(1和2可互用)
//int转QString:QString::number(18)
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(18)));
}
}
4.其他
(1)栈控件效果图:
(2)代码:文章来源:https://www.toymoban.com/news/detail-425593.html
#include "widget.h"
#include "ui_widget.h"
#include<QMovie>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//1.栈控件使用
//设置默认定位scrollArea
ui->stackedWidget->setCurrentIndex(0);
//scrollArea按钮
connect(ui->btn_scroll,&QPushButton::clicked,[=](){
//CurrentIndex可在ui设计界面查看
ui->stackedWidget->setCurrentIndex(0);
});
//toolBox按钮
connect(ui->btn_tool,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
//TabWidget按钮
connect(ui->btn_tab,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
//2/下拉框
ui->comboBox->addItem("滑板");
ui->comboBox->addItem("自行车");
ui->comboBox->addItem("小电驴");
//点击按钮 选择自行车选项
connect(ui->btn_select,&QPushButton::clicked,[=](){
//法1:
//ui->comboBox->setCurrentIndex(1);
//法2:
ui->comboBox->setCurrentText("自行车");
});
// //利用Qlable显示图片
// ui->lbl_Image->setPixmap(QPixmap(":/Image/a.png"));
// //利用Qlabel显示gif动态图片
// QMovie *movie =new QMovie(":/XX.gif");
// ui->lbl_movie->setMovie(movie);
// movie->start();//播放
}
注
内容来自:b站最新QT从入门到实战完整版|传智教育。
如有错误,欢迎指出。文章来源地址https://www.toymoban.com/news/detail-425593.html
到了这里,关于QT学习笔记(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!