QT学习笔记(day02)

QMainWindow

  1. 菜单栏 (有且只能有一个)
	QMenuBar *bar = menuBar();
	setMenuBar(bar);
	// 创建菜单
    QMenu *fileMenu = bar->addMenu("文件");
    QMenu *editMenu = bar->addMenu("编辑");

    // 创建菜单项
    QAction *newAction = fileMenu->addAction("新建");
    fileMenu->addSeparator();    // 添加分割线
    QAction *openAction = fileMenu->addAction("打开");
  1. 工具栏 (可以有多个)
	QToolBar *toolBar = new QToolBar();
    addToolBar(Qt::LeftToolBarArea,toolBar);

    // 设置只允许左右停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

    // 设置浮动
    toolBar->setFloatable(false);

    // 设置移动(总开关)
    toolBar->setMovable(false);

    // 工具栏添加小部件
    toolBar->addAction(newAction);
    toolBar->addSeparator();    // 添加分割线
    toolBar->addAction(openAction);

  1. 状态栏 (只能有一个)
	QStatusBar *staBar = statusBar();
    setStatusBar(staBar);

    QLabel *label1 = new QLabel("左侧提示信息",this);
    staBar->addWidget(label1);

    QLabel *label2 = new QLabel("右侧提示信息",this);
    staBar->addPermanentWidget(label2);
  1. 铆接部件(即浮动窗口) (可以有多个)
	QDockWidget *dock = new QDockWidget("浮动窗口",this);
    addDockWidget(Qt::TopDockWidgetArea,dock);

    // 只允许左右停靠
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
  1. 核心部件 (只能有一个)
	QTextEdit *edit = new QTextEdit(this);
    setCentralWidget(edit);

tips: 1. 添加这些控件的方法使用set为前缀的,基本上都只能创建一个,而使用add为前缀的基本上都可以创建多个。2. new出来的空间要记得添加this参数,将创建在堆区的控件绑定到QT对象树上,便于堆区内存释放。

QT添加资源文件

如需要在工具栏各个属性旁添加图标时,需要添加一些资源文件。

资源文件添加步骤:

  1. 首先将资源文件夹复制到项目目录下。

  2. 在QTCreater中右击项目->添加新文件->Qt->Qt Rescourse File

  3. 给添加的资源文件起名 xxx,之后会在项目下生成一个xxx.qrc文件

  4. 打开xxx.qrc文件,添加前缀,添加资源文件

资源文件使用:

: + 前缀名 + 文件名

	// 给文件添加小图标
    // 资源文件添加 语法: ": + 前缀名 + 文件名称"
    ui->actionnew->setIcon(QIcon(":/Image/Luffy.png"));
    ui->actionopen->setIcon(QIcon(":/Image/LuffyQ.png"));

QT对话框(QTDialog)

分类:模态对话框 非模态对话框
模态对话框: 不可以对其它窗口进行操作
非模态对话框: 可以对其它窗口进行操作

通过信号和槽来实现当点击工具栏中的新建,创建对话框

	// 点击新建,创建对话框
    connect(ui->actionNew,&QAction::triggered,this,[=](){
        // 模态对话框创建
        QDialog dlg(this);
        dlg.resize(220,90);
        dlg.exec(); // 设置阻塞,让对话框等待用户操作
    });
	// 点击新建,创建对话框
    connect(ui->actionNew,&QAction::triggered,this,[=](){
        // 非模态对话框创建
       QDialog *dlg2 = new QDialog(this);
       dlg2->resize(220,90);
        dlg2->show();
        // 设置 55号属性
        dlg2->setAttribute(Qt::WA_DeleteOnClose);
    });

tips: 非模态对话框的显示使用的是show()方法,当非模态对话框使用非new创建在栈区,由于这里创建使用的是lambda表达式,离开作用域对话框会很快消失,因此使用new创建在堆区;但是对话框的内存需要等待MainWindow关闭后才能得到释放,如果在多次打开关闭对话框后可能因内存未及时释放产生内存泄露,因此设置55号属性,及时释放内存。

原文地址:https://www.cnblogs.com/HaroldC/p/13410114.html