1.坐标体系
以左上角为原点,X向右增加,Y向下增加
D:\QT\QTcode\day01\4_源代码\04_QtZuobiao
mywidget.cpp:
#include "mywidget.h"
#include <QPushButton>
#include "mybutton.h"
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
/* 对于父窗口(主窗口),坐标系统相对于屏幕
* 原点:相对于屏幕左上角
* x: 往右递增
* y: 往下递增
*/
move(100, 100);
/* 子窗口,坐标系统相对于父窗口
* 原点:相对于窗口空白区域左上角(不包括边框)
* x: 往右递增
* y: 往下递增
*/
QPushButton *b1 = new QPushButton(this);
b1->move(100, 100);
b1->setText("^_^");
b1->resize(200, 100);
QPushButton *b2 = new QPushButton(b1);
b2->move(10, 10);
b2->setText("@_@");
MyButton *b3 = new MyButton(this);
b3->setText("123");
//1)指定父对象后 2)直接或间接继承于QObject
//子对象如果是动态分配空间的new,不需要手动释放delete
//系统会自动释放
}
MyWidget::~MyWidget()
{
}
mybutton.cpp
#include "mybutton.h"
#include <QDebug>
MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
}
MyButton::~MyButton()
{
qDebug() << "按钮被析构";
}
2.新建菜单栏 ,状态栏
#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QDebug>
#include <QToolBar>
#include <QPushButton>
#include <QStatusBar>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏
QMenuBar *mBar = menuBar();
//添加菜单
QMenu *pFile = mBar->addMenu("文件");
//添加菜单项,添加动作
QAction *pNew = pFile->addAction("新建");
connect(pNew, &QAction::triggered,
[=]()
{
qDebug() << "新建被按下";
}
);
pFile->addSeparator(); //添加分割线·
QAction *pOpen = pFile->addAction("打开");
//工具栏,菜单项的快捷方式
QToolBar *toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(pNew);
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("2", this));
// addPermanentWidget 从右往左添加
sBar->addPermanentWidget(new QLabel("3", this));
//核心控件
QTextEdit *textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea, dock);
//给浮动窗口添加控件
QTextEdit *textEdit1 = new QTextEdit(this);
dock->setWidget(textEdit1);
}
MainWindow::~MainWindow()
{
}
添加菜单文件,和添加菜单栏新建
在菜单栏新建和打开之间添加分隔符
添加工具栏,菜单项的快捷方式
添加小空间^_^
按下^_^会出现123
添加状态栏,2从左往右添加,3从右往左添加。
添加核心控件,我们就可以往文本中添加内容了
添加浮动窗口
3.模态与非模态对话框
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QMenuBar *mBar = menuBar();
setMenuBar(mBar);
QMenu *menu = mBar->addMenu("对话框");
QAction *p1 = menu->addAction("模态对话框");
connect(p1, &QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();
qDebug() << "111111";
}
);
QAction *p2 = menu->addAction("非模态对话框");
connect(p2, &QAction::triggered,
[=]()
{
// dlg.show();
// qDebug() << "111111";
// QDialog *p = new QDialog(this);
// p->show();
QDialog *p = new QDialog;
p->setAttribute(Qt::WA_DeleteOnClose);
p->show();
}
);
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::Cancel
);
switch(ret)
{
case QMessageBox::Ok:
qDebug() << "i am ok";
break;
case QMessageBox::Cancel:
qDebug() << "i am bad";
break;
default:
break;
}
}
);
QAction *p5 = menu->addAction("文件对话框");
connect(p5, &QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,
"open",
"../",
"souce(*.cpp *.h);;Text(*.txt);;all(*.*)"
);
qDebug() << path;
}
);
}
MainWindow::~MainWindow()
{
}
摸态对话框后面的对话框是隐藏的,点击不了
模态对话框第一个×掉后,第二个也随着消失,非模态对话框第一个×掉后,第二个也要跟着×掉。
关于对话框
问题对话框选择OK显示i am ok,选择Cancel显示i am bad。