Qt学习记录
新建工程
1、main.cpp文件
#include "mywidget.h"
#include <QApplication> /* 包含一个应用程序的类 */
/**
* @brief 程序入口
* @param argc: 命令行变量的数量
* @param argv: 命令行变量数组
* @retval 无
*/
int main(int argc, char *argv[])
{
/* 应用程序对象,有且只有一个 */
QApplication a(argc, argv);
/* 窗口对象 MainWindow ---> QWight */
myWidget w;
/* 调用show方法显示窗口 */
w.show();
/* 程序到此,开始循环 */
return a.exec();
}
/*
* F4:同名文件切换
* ctrl i:自动对齐
* F1:帮助文档
* ctrl b:编译
*/
2、mywidget.cpp文件
#include "mywidget.h"
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
}
myWidget::~myWidget()
{
}
3、mywidget.h函数
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(QWidget *parent = nullptr);
~myWidget();
};
#endif // MYWIDGET_H
4、Prject.pro文件
# Qt包含的模块
QT += core gui
# 大于版本4,需包含 widgets 模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# 生成exe文件名称
TARGET = project_name
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
# 源文件
SOURCES += \
main.cpp \
mywidget.cpp
# 头文件
HEADERS += \
mywidget.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
创建按钮
1、以顶层窗口显示一个按钮
#include "mywidget.h"
#include <qpushbutton.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
/* 设置窗口大小 */
resize(800, 600);
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton;
btn->show(); /* 以顶层窗口显示 */
}
myWidget::~myWidget()
{
}
2、依附本窗口显示(一)
#include "mywidget.h"
#include <qpushbutton.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
/* 设置窗口大小 */
resize(800, 600);
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton("确认", this);
btn->move(100, 100);
}
myWidget::~myWidget()
{
}
3、依附本窗口显示(二)
#include "mywidget.h"
#include <qpushbutton.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
resize(800, 600); /* 设置窗口大小 */
setFixedSize(800, 600); /* 固定窗口大小 */
setWindowTitle("study");
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton;
btn->move(100, 100); /* 设置按钮位置 */
/* 依附于当前窗口显示,需设置父类*/
btn->setParent(this);
btn->setText("确认");
}
myWidget::~myWidget()
{
}
信号和槽
- 信号是可以连接信号
- 一个信号可以连接多个槽函数;
- 多个信号可以连接同一个槽函数;
- 信号和槽函数的参数必须类型一一对应;
- 信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数;
1、信号--->槽:按钮关闭窗口
#include "mywidget.h"
#include <qpushbutton.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
setFixedSize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton("关闭", this);
btn->move(100, 100); /* 设置按钮位置 */
/* 按钮(按下) ---> 窗口(关闭)*/
connect(btn, &QPushButton::clicked, this, &QWidget::close);
}
myWidget::~myWidget()
{
}
2、信号--->信号--->槽:按钮关闭窗口
#include "mywidget.h"
#include <qpushbutton.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
setFixedSize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton("确认关闭", this);
btn->move(100, 100); /* 设置按钮位置 */
QPushButton * btn2 = new QPushButton("关闭", this);
btn2->move(400, 100); /* 设置按钮位置 */
/* 按钮(按下) ---> 窗口(关闭)*/
connect(btn, &QPushButton::clicked, this, &QWidget::close);
/* 按钮2(按下) ---> 按钮(按下)*/
connect(btn2, &QPushButton::clicked, btn, &QPushButton::clicked);
/* 关闭连接 */
disconnect(btn2, &QPushButton::clicked, btn, &QPushButton::clicked);
}
myWidget::~myWidget()
{
}
3、Lambda表达式
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
myWidget::myWidget(QWidget *parent): QWidget(parent)
{
setFixedSize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建一个btn对象 */
QPushButton * btn = new QPushButton("确认关闭", this);
btn->move(100, 100); /* 设置按钮位置 */
QPushButton * btn2 = new QPushButton("关闭", this);
btn2->move(400, 100); /* 设置按钮位置 */
/* 按钮(按下) ---> 窗口(关闭)*/
connect(btn, &QPushButton::clicked, this, &QWidget::close);
/* 使用Lambda表达式,简化流程,按钮2(按下) ---> 按钮(按下)*/
connect(btn2, &QPushButton::clicked, this, [=](){
btn->clicked();
qDebug() << "调用“确认关闭”按钮" ;
});
}
myWidget::~myWidget()
{
}
窗口管理
1、菜单栏和工具栏
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qmenubar.h>
#include <qtoolbar.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建菜单栏 */
QMenuBar *bar = menuBar();
setMenuBar(bar); /* 放置菜单栏 */
/* 创建菜单 */
QMenu * fileMenu = bar->addMenu("文件");
/* 创建菜单项 */
QAction *newFile = fileMenu->addAction("新建");
/* 添加分隔符 */
fileMenu->addSeparator();
QAction * openFile = fileMenu->addAction("打开");
/* 创建工具栏 */
QToolBar * toolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea, toolBar);
/* 设置允许停靠区域 */
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::BottomToolBarArea);
/* 禁止浮动 */
toolBar->setFloatable(false);
/* 设置移动 */
toolBar->setMovable(false);
/* 复用菜单栏的选项 */
toolBar->addAction(newFile);
/* 添加分割线 */
toolBar->addSeparator();
QPushButton *btn = new QPushButton("打开", this);
/* 工具栏中添加控件 */
toolBar->addWidget(btn);
}
myWidget::~myWidget()
{
}
2、状态栏
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qstatusbar.h>
#include <qlabel.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建一个状态栏,有且只有一个 */
QStatusBar * stBar = statusBar();
setStatusBar(stBar); /* 设置状态栏到窗口中 */
/* 创建一个标签控件 */
QLabel * label = new QLabel("运行", this);
stBar->addWidget(label); /* 在状态栏放置一个标签,默认放在右边 */
stBar->addPermanentWidget(label); /* 将标签放在状态栏左边 */
}
myWidget::~myWidget()
{
}
3、铆接部件和中心部件
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qstatusbar.h>
#include <qlabel.h>
#include <qdockwidget.h> /* 铆接部件头文件 */
#include <qtextedit.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建铆接部件,可以有多个 */
QDockWidget * dockWidget = new QDockWidget("浮动", this);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget); /* 在主窗口添加铆接部件 */
/* 仅允许在上和下停靠 */
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
/* 创建一个文本编辑器 */
QTextEdit * edit = new QTextEdit(this);
/* 设置中心部件,只能有一个 */
setCentralWidget(edit);
}
myWidget::~myWidget()
{
}
添加资源文件
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qmenubar.h>
#include <qtoolbar.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建菜单栏 */
QMenuBar *bar = menuBar();
setMenuBar(bar); /* 放置菜单栏 */
/* 创建菜单 */
QMenu * fileMenu = bar->addMenu("文件");
/* 创建菜单项 */
QAction *newFile = fileMenu->addAction("新建");
/* 将图片图片保存在同一目录,并在Qt中添加资源文件 */
newFile->setIcon(QIcon(":/Picture/res/icon.png"));
fileMenu->addSeparator();
}
myWidget::~myWidget()
{
}
对话框
1、创建模态对话框
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qdialog.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建菜单栏 */
QMenuBar *bar = menuBar();
setMenuBar(bar); /* 放置菜单栏 */
/* 创建菜单 */
QMenu * fileMenu = bar->addMenu("文件");
/* 创建菜单项 */
QAction *newFile = fileMenu->addAction("新建");
/* 将图片图片保存在同一目录,并在Qt中添加资源文件 */
newFile->setIcon(QIcon(":/Picture/res/icon.png"));
fileMenu->addSeparator();
/* 新建(点解) ---> 对话框(弹出) */
connect(newFile, &QAction::triggered, [=](){
/* 创建一个对话框,分为模态(不可操作其他窗口)和非模态 */
/* 模态对话框创建 */
QDialog dlg(this);
dlg.resize(100,100);
dlg.exec();
qDebug()<< "模态对话框";
});
}
myWidget::~myWidget()
{
}
2、创建非模态对话框
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qdialog.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建菜单栏 */
QMenuBar *bar = menuBar();
setMenuBar(bar); /* 放置菜单栏 */
/* 创建菜单 */
QMenu * fileMenu = bar->addMenu("文件");
/* 创建菜单项 */
QAction *newFile = fileMenu->addAction("新建");
/* 将图片图片保存在同一目录,并在Qt中添加资源文件 */
newFile->setIcon(QIcon(":/Picture/res/icon.png"));
fileMenu->addSeparator();
/* 新建(点解) ---> 对话框(弹出) */
connect(newFile, &QAction::triggered, [=](){
/* 创建非模态窗口,必须new一个,否则在函数结束后就被释放了 */
QDialog *dlg = new QDialog;
dlg->resize(100,100);
/* 关闭窗口后,释放内存 */
dlg->setAttribute(Qt::WA_DeleteOnClose);
/* 显示 */
dlg->show();
});
}
myWidget::~myWidget()
{
}
3、标准消息对话框
#include "mywidget.h"
#include <qpushbutton.h>
#include <qdebug.h>
#include <qmenubar.h>
#include <qdialog.h>
#include <qmessagebox.h>
myWidget::myWidget(QMainWindow *parent): QMainWindow(parent)
{
resize(800, 600); /* 固定窗口大小 */
setWindowTitle("study"); /* 设置窗口名称 */
/* 创建菜单栏 */
QMenuBar *bar = menuBar();
setMenuBar(bar); /* 放置菜单栏 */
/* 创建菜单 */
QMenu * fileMenu = bar->addMenu("文件");
/* 创建菜单项 */
QAction *newFile = fileMenu->addAction("新建");
fileMenu->addSeparator();
/* 新建(点解) ---> 对话框(弹出) */
connect(newFile, &QAction::triggered, [=](){
/* 消息对话框 */
// QMessageBox::information(this, "info", "信息");
/* 错误对话框 */
// QMessageBox::critical(this, "错误","配置错误");
/* 提问对话框 */
// QMessageBox::StandardButton value = QMessageBox::question(this, "question", "是否确认更改", QMessageBox::Yes | QMessageBox::No);
// if(value == QMessageBox::Yes)
// {
// qDebug()<< "yes";
// }
/* 警告对话框 */
QMessageBox::warning(this, "waring", "警告");
});
}
myWidget::~myWidget()
{
}
定时器
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qtimer.h> /* 定时器 */
#include <qdebug.h>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
/* 创建一个定时器 */
QTimer * timer1 = new QTimer;
timer1->start(1000); /* 定时器步长 */
/* 定时器(超时) ---> 窗口(打印) */
connect(timer1, &QTimer::timeout,[](){
qDebug("hello!\r\n");
});
}
MainWindow::~MainWindow()
{
delete ui;
}
导入QSS文件
将样式导入到资源文件
#include "widget.h"
#include <QApplication>
#include <qfile.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
/* qss样式配置 */
QFile styleFile(":/res/style.qss"); /* 打开一个样式文件 */
if(styleFile.open(QFile::ReadOnly))
{
/* 读取样式,并设定 */
QString styleSheet = QString(styleFile.readAll());
a.setStyleSheet(styleSheet);
}
Widget w;
w.show();
return a.exec();
}

浙公网安备 33010602011771号