栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT 学习 day1

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT 学习 day1

文章目录
  • 1. Qt的介绍
  • 2. Qt的框架
  • 3. 项目文件(.pro)
  • 4. 第一个qt程序
  • 5. 父窗口和子窗口的区别 (控件,部件,构件)
  • 6. 信号和槽
    • 两个界面之间的联动
  • 7. 坐标系统
  • 8. 内存回收机制 new delete
  • 9. 带菜单栏的窗口
  • 10. 对话框
    • 模态对话框
    • 非模态对话框
    • 标准对话框
    • 文件对话框
  • 小tip
    • 帮助文档跳转问题

1. Qt的介绍 2. Qt的框架 3. 项目文件(.pro)
光标 放在对应的类中,然后 fn +  f1 就会跳到帮助文档
用头文件之前,必须保证.pro 包含相应的模块
![在这里插入图片描述](https://img-blog.csdnimg.cn/21eeba2d328244fc926345332ef6f45d.png)

qmake 和 cmake好像

qt5 基本模块

4. 第一个qt程序
  1. 创建新项目
  2. 其他项目 — 空qmake project
  3. 编写 pro文件
  4. 添加新文件

  5. 基本结构
#include 

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    app.exec();
    return 0;
}

  1. 加入界面
#include 
#include   // 窗口控件基类

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QWidget w;
    w.setWindowTitle("hello qt");		// 设置标题
    w.show();

    app.exec();
    return 0;
}

5. 父窗口和子窗口的区别 (控件,部件,构件)
下面这段代码 不指定父对象的运行结果
#include 
#include   // 窗口控件基类
#include 

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QWidget w;
    w.setWindowTitle("hello qt");


    QPushButton b;
    b.setText("hhh"); // 给按钮赋值
    // b.setParent(&w);
    b.show();


    w.show();
    app.exec();
    return 0;
}


是两个单独的控件

如果指定父对象后,结果如下。

6. 信号和槽

自定义槽函数
void mySignal(); public slots: void changeWin(); private: QPushButton b1; }; #include "subwidget.h" subWidget::subWidget(QWidget *parent) : QWidget(parent) { b1.setParent(this); b1.setText("跳转到大窗口"); resize(400, 300); connect(&b1, &QPushButton::pressed, this, &subWidget::changeWin); } void subWidget::changeWin() { emit mySignal(); }

而在主界面中,设置对子界面这种信号的处理槽函数。达到通信效果。
     // 处理子窗口的信号
     connect(&sw, &subWidget::mySignal, this, &Widget::dealSub);
至此,我们实现了两个窗口之间的联动。
7. 坐标系统

对于父窗口(主窗口),坐标系统相对于屏幕
原点:相对于屏幕左上角
x:往右递增
y:往下递增

子窗口,坐标系统相对于父窗口
原点:相对于窗口空白区域左上角(不包括边框)
x:往右递增
y:往下递增

8. 内存回收机制 new delete

前提: 1)指定父对象后 2)直接或间接继承与QObject
指定父对象后,子对象如果是动态分配空间的new,不需要手动释放delete
系统会自动释放。

9. 带菜单栏的窗口

带菜单栏的窗口,需要继承基类 QMainWindow
首先需要一个 菜单栏

    // 菜单栏
    QMenuBar *mBar = menuBar();

然后需要添加菜单

    // 添加菜单
    QMenu *pFile = mBar->addMenu("文件");
    QMenu *pFile2 = mBar->addMenu("图片");

这就是菜单
菜单需要菜单项,也就是上图中的 new和 open这些选项。菜单项可以添加功能,通过信号和槽的方式来添加。

    // 添加菜单项, 添加动作
    QAction *pNew = pFile->addAction("new");

    connect(pNew, &QAction::triggered,
            [=] ()
            {
                qDebug() << "新建被按下";
            }

            );
    pFile->addSeparator();  // 添加分割线
    QAction *pOpen = pFile->addAction("open");

除了菜单栏以外,还可以添加工具栏(菜单栏的快捷方式)

    // 工具栏 菜单项的快捷方式
    QToolBar *toolBar = addToolBar("toolBar");

    // 工具栏 添加快捷键
    toolBar->addAction(pNew);
    toolBar->addAction(pOpen);


除了添加菜单栏的东西,还可以添加控件

    // 添加小控件,这里添加一个按钮
    QPushButton *b = new QPushButton(this);
    b->setText("^_^");
    toolBar->addWidget(b);

    connect(b, &QPushButton::clicked,
            [=]()
            {
                b->setText("123");
            }
    );


还有一个部分是状态栏,也就是最下边的部分

    // 状态栏
    QStatusBar *sBar = statusBar();
    QLabel *label = new QLabel(this);
    label->setText("Normal text file");
    sBar->addWidget(label);
    // addWidget 从左往右添加
    sBar->addWidget(new QLabel("second", this));
    // addPermanentWidget 从右往左添加
    sBar->addPermanentWidget(new QLabel("right", this));


这些都弄完的话,就是核心控件了。就是主要的功能区。这里添加一个编辑框作为示例

    // 核心控件
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);


到目前为止,基本的功能已经都有了,接下来再加一个浮动窗口。

    // 浮动窗口
    QDockWidget *dock = new QDockWidget(this);
    addDockWidget(Qt::LeftDockWidgetArea,dock);
    QTextEdit *textEdit1 = new QTextEdit(this);
    dock->setWidget(textEdit1);

10. 对话框 模态对话框

模态对话框即对话框出现后,不可以点击页面上的其他控件,只能点击当前对话框。

    QAction *p1 = menu->addAction("模态对话框");
    connect(p1, &QAction::triggered,
            [=]()
            {
                QDialog dlg;
                dlg.exec();
                qDebug() << "11111";
            }
            );

非模态对话框

非模块对话框则是对话框出现后,可以点击当前对话框,也可以不点。

    QAction *p2 = menu->addAction("非模态对话框");
    connect(p2, &QAction::triggered,
            [=]()
            {
                // 这样的 局部变量会一闪而过,因为出了作用域这个对象就析构了
//                QDialog dlg;
//                dlg.show();

                // 可以作为主类的成员变量,这样就可以了
//                  dlg_.show();

                // 或者 new一个局部变量
                QDialog *p = new QDialog();
                p->setAttribute(Qt::WA_DeleteOnClose);
                p->show();
            }
            );

标准对话框

QMessageBox 提供了标准的对话框。提供了静态函数的接口。

    // 标准对话框
    QAction *p3 = menu->addAction("关于对话框");
    connect(p3, &QAction::triggered,
            [=]()
            {
                QMessageBox::about(this, "about", "关于qt");
            }
            );

可以看到,这也是一个模态对话框

    QAction *p4 = menu->addAction("问题对话框");
    connect(p4, &QAction::triggered,
            [=]()
    {
            int ret = QMessageBox::question(this, "question", "Are you OK?",
                                            QMessageBox::Ok, QMessageBox::Yes, QMessageBox::No);
            switch (ret) {
            case QMessageBox::Yes:
                qDebug() << "I am ok";
                break;
            case QMessageBox::No:
                qDebug() << "I am No";
                break;
            }
    });

文件对话框

QFileDialog 提供了文件对话框

    QAction *p5 = menu->addAction("文件对话框");
    connect(p5, &QAction::triggered,
            [=]()
            {
                QString path = QFileDialog::getOpenFileName(
                            this,
                            "open",
                            "../",
                            "source(*.cpp *.h);;"
                            "Text(*.txt);;"
                            "all(*.*)"
                            );
                qDebug() << path;
            }
            );

文件过滤

小tip 帮助文档跳转问题

qt可以使用 fn + f1 跳到帮助文档
但是有时候,会发现找不到。
这里我们对这个函数找帮助文档

结果如下
这和我们的预期不符合。 这不是因为qt功能不行,而是我们用错了。

可以看到这个函数由一个参数,而我们使用帮助文档时没有写参数。
这里我们添加一个数试试。

结果如下,和预期一样。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号