QT Day1

QT Day1


一、QT基本框架

1、QT注意事项

QT文件路径必须要纯英文

2、QT类类型

  • QMainWindow(带有菜单栏目)
  • Qwidget(常用)

3、文件系统

QT Day1
main函数分析

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    \\有且只有一个应用程序对象
    QApplication a(argc, argv);
    \\继承于QMainWindow,为一个窗口
    MainWindow w;
    \\窗口默认隐藏,这里让他显示(可以用这个原理来设计隐藏窗口)
    w.show();
    \\a.exec()让用户输入,让窗口不会自动谈入
    return a.exec();
}

/*为了让代码简便,我们将函数功能写在类中,一般不写入main函数中!!!!*/

二、项目文件

QT Day1

1、工程模块.pro

对于一个新的模块需要添加qmake,可以通过在头文件中按F1查找。例如

#include <QWidget>  //需要添加QT += Widigets

这里的操作需要注意大小写以及+=符号的位置,否则会导致模块无法被识别

2、QT模块框架

QT Day1

  • QT Widget:最常用
  • Qt Webkit:浏览器引擎
  • Qt Test:测试单元
  • Qt SQL:数据库
  • Qt Quick/Qt QML: JS实现单元
  • Qt Multimedia Widget/Qt Mulitmedia:多媒体
  • Qt Network:网络通信

三、QT项目

1、.pro 文件配置

 Qt += widgets  //指定这个为图形化界面编程,引用QWidget

2、main.cpp

#include <QApplication>
#include <QWidget> //窗口控件基类

int main(int *argc,char **argv)
{
    QApplication app(argc,argv);
    QWigets w;
    w.setWindowTitle("这个标题"); //!!!!设置标题
    w.show();
    app.exec();
    return 0;
}

四、父窗口与子窗口操作

1、按钮控件

#include <QPushButton>
  • 定义:QPusheButton b;
  • 设置标题:b.setText(Qstring str);
  • 显示:b.show()
  • 指定父对象:b.setParent(&w);
  • 设置位置:b.move(100,100);

注意事项:

  1. 不用在构造函数中定义按钮,这样构造的按钮为局部变量,无法显示,应当在private 元素中定义
  2. 如果不指定父对象,那么按钮与界面将独立

2、两个独立窗口的定义

思路:在主窗口中定义一个private成员为subwindow类(继承于QWidget),在构造函数中定义利用show将其展示
窗口大小的定义:

resize(100,100);

五、信号与槽

为了让button在触发之后出现反应,我们需要用信号的形式传递出去

1、信号Signal

常用的信号:

  • clicked
  • released
  • pressed
  • toggled

自定义信号步骤:

  1. 在.h文件中的signals中定义信号名称
  2. 在调用中用emit mysignal()将信号发出

实例:
设计两个窗口,且每个窗口都有一个按钮时,我们希望按下按钮就可以切换到另外一个窗口,那么当子窗口切换到主窗口时无法发送信号,就需要自定义信号。
对于子窗口SubWidget中对象:

signal:
    void mysignal;
void sendsignal()
{
    emit mysignal();
}

在SubWidget.c中

/*此处b为SubWidget上面的按钮*/
connect(&b,&QPushButton::released,this,&SubWidget::sendsignal);

!!!关键词 emit 发送信号
信号的重载:
使用指向函数的指针进行实现!!

2、槽 slot

自定义槽步骤:

  1. 定义不同函数(任意成员函数,普通函数)
  2. 参数返回值为void

实例:

/*这里myslot为自己定义的槽函数*/
connect(&b,&QPustButton::released,&a,&MyWidget::myslot);

在MyWidget.h中:

public:
       void myslot();

在MyWidget.cpp中:

void MyWidget::myslot()
{
    //隐藏主窗口
    this.hide();
    //显示子窗口
    b.show();
}

3、connect连接信号和槽

connect(信号发出方地址,signal,信号接收方,slot);

实例:

QPushButton b;
QWidget a;
b.setParent(&a);
/*因为一般写入构造函数,&a一般用this指针*/
connect(&b,&QPustButton::released,&a,&QWidget::close);

注意事项:注意在slot和signal的时候要写入全局变量的引用

4、Lamda表达式

前期准备:
在.pro 文件中要加入

CONFIG += C++11

使用方法:

Lamda表达式详细解释(C++11)

connect(&b,&QPushButton:released,
        [=]()
        {
          qDebug()<<"Lamda表达式";  
        }
        )

六、坐标系统

move移动位置

七、带菜单栏的窗口(QMainWindow下)

1、菜单栏

//菜单栏
#include <QMenuBar>
#include <QMenu>
#include <QAction>
QMenuBar *MenuBar = menuBar(); //系统定义了menuBar()
//菜单
QMenu *PFile = MenuBar->addMenu("文件");
//添加菜单项(action)
QAction *PFile_new = PFile->addAction("新建");

QAction中的信号:

  • changed
  • hovered
  • toggled
  • triggered

处理代码

connect(PFile_new,&QAction::triggered,b,slot);//这里PFile_new为指针

2、工具栏

//工具栏添加快捷方式
#include <QToolBar>
#include <QPushButton>

QToolBar *toolBar = addToolBar("tool");

//添加快捷键
toolbar->addAction(PFile_new);

//添加小控件
QPushButton b;
b.setText("控件");
toolbar->addWidget(&b);

3、状态栏

#include <QStatusBar>
#include <QLabel>

{
    QStatusBar *Sbar = statusBar();//以及定义
    QLabel *label = new QLable(this);
    label -> setText("Normal text file");
    //addWidget从左往右添加
    Sbar->addWidget(label); //或者 Sbar->addWidget(new QLabel("2",this));

    //addPermanentWidget() 从右往左
}

4、文本编辑区

#include <QTextEdit>

QTextEdit *textedit = new QTextEdit(this);
setCentralWidget(textedit); //将文本编辑器放在中心

八、对话框

1、模态对话框

操作对话框同时无法操作之后的窗口

#include <QDialog>

{
    QDialog dlg;
    dlg.exec();
}

2、非模态对话框

操作时可以操作后面的窗口

#include <QDialog>

{
    //dlg当做成员,防止释放
    dlg.show();
}

3、标准对话框

是否/多个选项的对话框

#include <QMessageBox>

{
    //关于对话框(一个选项)
    QMessageBox::about(this,标题,内容);
    
    //问题对话框(多个选项)
    int re = QMessageBox::question(this,标题,内容,按钮1|按钮2|按钮3);
    /*这个对话框可以通过int变量接收结果*/
    switch(re)
    {
        case QMessageBox::Yes:
            操作1;
        case QMessageBox::No:
            操作2;    
    }
}

4、文件对话框

#include <QFileDialog>
{
    //获得文件名字
    QString str = QFileDialog::getOpenFileName(
        this,
        "open",                                       //标题
        "../",                                        //上一级路径
        "Text(*.txt *cpp);;Image(*png *jpg);;all(*.*)"      //指定文件类型
    )
}

九、复习(notepad++界面项目)

QT Day1


标签:暂无标签
版权属于:Jtripper 所有,转载请注明文章来源。

本文链接: https://www.jtripperbacaf.com/index.php/archives/4/

上一篇
没有了
赞 (1)

评论区

发表评论

39+22=?

暂无评论,要不来一发?

回到顶部