QT第一天案例综合
This commit is contained in:
parent
c19ec3fdf9
commit
790228aba6
|
@ -0,0 +1,73 @@
|
|||
# This file is used to ignore files which are generated
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
*~
|
||||
*.autosave
|
||||
*.a
|
||||
*.core
|
||||
*.moc
|
||||
*.o
|
||||
*.obj
|
||||
*.orig
|
||||
*.rej
|
||||
*.so
|
||||
*.so.*
|
||||
*_pch.h.cpp
|
||||
*_resource.rc
|
||||
*.qm
|
||||
.#*
|
||||
*.*#
|
||||
core
|
||||
!core/
|
||||
tags
|
||||
.DS_Store
|
||||
.directory
|
||||
*.debug
|
||||
Makefile*
|
||||
*.prl
|
||||
*.app
|
||||
moc_*.cpp
|
||||
ui_*.h
|
||||
qrc_*.cpp
|
||||
Thumbs.db
|
||||
*.res
|
||||
*.rc
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
|
||||
# qtcreator generated files
|
||||
*.pro.user*
|
||||
|
||||
# xemacs temporary files
|
||||
*.flc
|
||||
|
||||
# Vim temporary files
|
||||
.*.swp
|
||||
|
||||
# Visual Studio generated files
|
||||
*.ib_pdb_index
|
||||
*.idb
|
||||
*.ilk
|
||||
*.pdb
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcproj
|
||||
*vcproj.*.*.user
|
||||
*.ncb
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.vcxproj
|
||||
*vcxproj.*
|
||||
|
||||
# MinGW generated files
|
||||
*.Debug
|
||||
*.Release
|
||||
|
||||
# Python byte code
|
||||
*.pyc
|
||||
|
||||
# Binaries
|
||||
# --------
|
||||
*.dll
|
||||
*.exe
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
#include "widget.h"
|
||||
#include "mywidget2.h"
|
||||
#include "widget3.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QScreen>
|
||||
#include <QDebug>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
// Widget w;
|
||||
|
||||
// 设置窗口的标题、初始大小、固定的最大宽和高
|
||||
// w.setWindowTitle("标题");
|
||||
// w.resize(1200,900);
|
||||
// w.setFixedSize(600,400);
|
||||
|
||||
// 获取主屏幕
|
||||
// QScreen *desktop = QApplication::primaryScreen();
|
||||
// QRect screenGeometry = desktop->geometry();
|
||||
// int screenWidth = screenGeometry.width();
|
||||
// int screenHeight = screenGeometry.height();
|
||||
// // 获取屏幕信息
|
||||
// qDebug() << "屏幕宽度:" << screenWidth;
|
||||
// qDebug() << "屏幕高度:" << screenHeight;
|
||||
|
||||
|
||||
// MyWidget2 w2; // 修改为新增的 MyWidget2 类
|
||||
|
||||
Widget3 w3;
|
||||
|
||||
w3.show();
|
||||
return a.exec();
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
#include "mywidget2.h"
|
||||
|
||||
MyWidget2::MyWidget2(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
// 设置窗口的大小
|
||||
resize(800,640);
|
||||
setWindowTitle("第二个窗口");
|
||||
|
||||
mBtn = new QPushButton("提取输入的内容",this);
|
||||
// mEdit = new QLineEdit(this);
|
||||
mEdit = new QLineEdit;
|
||||
mEdit->setParent(this);
|
||||
|
||||
mEdit->setFixedSize(200,50);
|
||||
mEdit->move(10,10);
|
||||
mBtn->setFixedSize(200,100);
|
||||
mBtn->move(10,70);
|
||||
|
||||
connect(mBtn,&QPushButton::clicked,this,&MyWidget2::getText);
|
||||
}
|
||||
|
||||
void MyWidget2::getText()
|
||||
{
|
||||
// 绑定
|
||||
qDebug()<<mEdit->text();
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
#ifndef MYWIDGET2_H
|
||||
#define MYWIDGET2_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPushButton>
|
||||
#include <QLineEdit> // 单行输入框
|
||||
#include <QDebug>
|
||||
|
||||
class MyWidget2 : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MyWidget2(QWidget *parent = nullptr);
|
||||
|
||||
public:
|
||||
void getText(); // 自定义成员函数
|
||||
|
||||
private:
|
||||
QPushButton *mBtn;
|
||||
QLineEdit *mEdit;
|
||||
|
||||
signals:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // MYWIDGET2_H
|
|
@ -0,0 +1,36 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# 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 \
|
||||
mywidget2.cpp \
|
||||
student.cpp \
|
||||
teacher.cpp \
|
||||
widget.cpp \
|
||||
widget3.cpp
|
||||
|
||||
HEADERS += \
|
||||
mywidget2.h \
|
||||
student.h \
|
||||
teacher.h \
|
||||
widget.h \
|
||||
widget3.h
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
|
@ -0,0 +1,6 @@
|
|||
#include "student.h"
|
||||
|
||||
Student::Student(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef STUDENT_H
|
||||
#define STUDENT_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
class Student : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Student(QObject *parent = nullptr);
|
||||
|
||||
signals:
|
||||
void sleep(); // 信号(函数)不需要实现
|
||||
void sleep(const QString &msg,int n);
|
||||
|
||||
};
|
||||
|
||||
#endif // STUDENT_H
|
|
@ -0,0 +1,15 @@
|
|||
#include "teacher.h"
|
||||
|
||||
Teacher::Teacher(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Teacher::wake_up(){
|
||||
qDebug() << "请睡觉的学生站起来,出去跑两圈";
|
||||
}
|
||||
|
||||
void Teacher::wake_up(const QString &msg)
|
||||
{
|
||||
qDebug() << "学生因为 "<<msg<<" 原因上课睡觉了";
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef TEACHER_H
|
||||
#define TEACHER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDebug>
|
||||
|
||||
class Teacher : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Teacher(QObject *parent = nullptr);
|
||||
|
||||
public slots:
|
||||
void wake_up();
|
||||
void wake_up(const QString &msg); // 信号带参数,处理的槽函数也要有参数,且类型保持一致
|
||||
|
||||
};
|
||||
|
||||
#endif // TEACHER_H
|
|
@ -0,0 +1,95 @@
|
|||
#include "widget.h"
|
||||
|
||||
// : Qwidget(parent) 初始化列表,调用父类构造函数
|
||||
Widget::Widget(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
// 初始化设置窗口的标题、大小和固定
|
||||
// setWindowTitle("按钮板");
|
||||
// // resize(400,300);
|
||||
// setFixedSize(400, 190);
|
||||
|
||||
// 添加按钮
|
||||
// 不要将对象存在栈区,应该在堆区创建
|
||||
// QPushButton *btn = new QPushButton("点我啊",this);
|
||||
// QPushButton *btn = new QPushButton;
|
||||
// btn->setParent(this);
|
||||
// btn->setText("点一下");
|
||||
// btn->setFixedSize(200, 100);
|
||||
// btn->move(100, 50); // 向右移动 100, 向下移动 50
|
||||
|
||||
// 创建 9 个按钮,三行三列,每个按钮的大小为 120,50
|
||||
// 每个按钮之间的间隔为 10
|
||||
// int w = 120, h = 50, space = 10;
|
||||
// QVector<QPushButton *> vbs; // 使用指针类型存储按钮
|
||||
// for (int i = 0; i < 3; i++)
|
||||
// { // 修改行范围
|
||||
// for (int j = 0; j < 3; j++)
|
||||
// { // 修改列范围
|
||||
// int btnNumber = i + j * 3 + 1;
|
||||
// // QPushButton *btn = new QPushButton(QString::number(btnNumber), this);
|
||||
// QPushButton *btn = new QPushButton;
|
||||
// btn->setText(QString::number(btnNumber));
|
||||
// btn->setParent(this);
|
||||
// btn->setFixedSize(w, h);
|
||||
// btn->move((space + w) * i + space, (space + h) * j + space);
|
||||
// vbs.append(btn); // 将按钮添加到向量中
|
||||
// }
|
||||
// }
|
||||
|
||||
// 方法二
|
||||
// int w=120, h =50,space=10;
|
||||
// QVector<QPushButton *> vbs;
|
||||
// for(int i=0;i <9; i++){
|
||||
// // QString::number(int) 将整数转化为QString字符串
|
||||
// QPushButton *btn=new QPushButton(QString::number(i+1), this);
|
||||
// btn->setFixedSize(w,h);
|
||||
|
||||
// // 第一行
|
||||
// int row = i/3;
|
||||
// int col= i % 3;
|
||||
// btn->move((space+w)*col+space,
|
||||
// (space+h)*row+space);
|
||||
// vbs.append(btn); // 将按钮添加到向量中
|
||||
// }
|
||||
|
||||
|
||||
resize(800,640);
|
||||
setMaximumSize(900,700); // 窗口最大尺寸
|
||||
move(0,0);
|
||||
|
||||
QPushButton *btn = new QPushButton("关闭",this);
|
||||
btn->setFixedSize(120,50);
|
||||
btn->move(10,10);
|
||||
|
||||
// 当前类对象 QPushButton 的点击事件感兴趣
|
||||
// 使用 connect() 进行绑定到当前窗口的 close()
|
||||
// 发送者和接受者都是 QObject 类对象的指针
|
||||
// Qt5 的信号绑定槽函数的方式
|
||||
connect(btn,&QPushButton::clicked,this,&Widget::close);
|
||||
|
||||
|
||||
QPushButton *maxBtn = new QPushButton("最大化",this);
|
||||
maxBtn->setFixedSize(120,50);
|
||||
maxBtn->move(10,70);
|
||||
|
||||
// 绑定的槽函数是自定义的
|
||||
connect(maxBtn,&QPushButton::clicked,this,&Widget::toggleShow);
|
||||
}
|
||||
|
||||
void Widget::toggleShow() // 自定义槽函数
|
||||
{
|
||||
// qDebug() 引入 <QDebug> 头文件
|
||||
qDebug()<<"show or hide"<<this->isMaximized() <<endl;
|
||||
if(isMaximized())
|
||||
{
|
||||
showNormal(); // 槽函数可以作为成员函数使用
|
||||
}
|
||||
else{
|
||||
showMaximized();
|
||||
}
|
||||
}
|
||||
|
||||
Widget::~Widget()
|
||||
{
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef WIDGET_H
|
||||
#define WIDGET_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPushButton>
|
||||
#include <QDebug>
|
||||
|
||||
class Widget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Widget(QWidget *parent = nullptr);
|
||||
~Widget();
|
||||
|
||||
public:
|
||||
void toggleShow();
|
||||
};
|
||||
#endif // WIDGET_H
|
|
@ -0,0 +1,66 @@
|
|||
#include "widget3.h"
|
||||
|
||||
Widget3::Widget3(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
setWindowTitle("自定义信号和槽");
|
||||
resize(800,640);
|
||||
|
||||
stu = new Student();
|
||||
stu->setParent(this);
|
||||
|
||||
techr = new Teacher(this);
|
||||
|
||||
// 绑定无参信号
|
||||
void(Student:: *sleep1)() = &Student::sleep;
|
||||
void(Teacher:: *wakeup1)() = &Teacher::wake_up;
|
||||
connect(stu,sleep1,techr,wakeup1);
|
||||
|
||||
// 绑定有参的信号和槽函数
|
||||
void(Student:: *sleep2)(const QString &,int n) = &Student::sleep;
|
||||
void(Teacher:: *wakeup2)(const QString &) = &Teacher::wake_up;
|
||||
connect(stu,sleep2,techr,wakeup2);
|
||||
// 手动发送一个信号
|
||||
// emit stu->sleep();
|
||||
|
||||
// 点击按钮发送学生睡觉的信号
|
||||
QPushButton *btn = new QPushButton("我睡会",this);
|
||||
btn->resize(120,50);
|
||||
btn->move(20,20);
|
||||
|
||||
QPushButton *btn2 = new QPushButton("再睡会",this);
|
||||
btn2->resize(120,50);
|
||||
btn2->move(20,90);
|
||||
edit = new QLineEdit(this);
|
||||
edit->resize(300,50);
|
||||
edit->move(20,160);
|
||||
|
||||
// 将一个信号绑定到另一个信号上,即发送另一个信号
|
||||
// connect(btn,&QPushButton::clicked,stu,&Student::sleep);
|
||||
// connect(btn,&QPushButton::clicked,this,&Widget3::to_sleep);
|
||||
connect(btn, SIGNAL(clicked()) ,this,SLOT(to_sleep())); // QT4 的信号槽写法
|
||||
// connect(btn2,&QPushButton::clicked,this,&Widget3::to_sleep2);
|
||||
|
||||
// Lambda表达式(匿名函数)
|
||||
// connect(btn,&QPushButton::clicked,[&](){
|
||||
// emit stu->sleep();
|
||||
|
||||
// void(Student:: *sleep1)() = &Student::sleep;
|
||||
// void(Teacher:: *wakeup1)() = &Teacher::wake_up;
|
||||
// disconnect(stu,sleep1,techr,wakeup1);
|
||||
// });
|
||||
connect(btn2,&QPushButton::clicked,[&](){
|
||||
const QString msg = edit->text();
|
||||
emit stu->sleep(msg,2);
|
||||
});
|
||||
}
|
||||
|
||||
void Widget3::to_sleep()
|
||||
{
|
||||
emit stu->sleep(); // 发送一个睡觉的信号
|
||||
}
|
||||
|
||||
void Widget3::to_sleep2()
|
||||
{
|
||||
const QString &msg = edit->text();
|
||||
emit stu->sleep(msg,2);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
#ifndef WIDGET3_H
|
||||
#define WIDGET3_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QPushButton>
|
||||
#include <QLineEdit>
|
||||
#include "student.h"
|
||||
#include "teacher.h"
|
||||
|
||||
class Widget3 : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Widget3(QWidget *parent = nullptr);
|
||||
|
||||
public slots:
|
||||
void to_sleep();
|
||||
void to_sleep2();
|
||||
|
||||
private:
|
||||
Student *stu;
|
||||
Teacher *techr;
|
||||
QLineEdit *edit; // 睡觉的原因
|
||||
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
#endif // WIDGET3_H
|
Loading…
Reference in New Issue