1.基本使用:
今天创建一个Mainwindow,
然后在mainwindow.cpp中写如下:
菜单栏和工具栏
#include "mainwindow.h"
#include<QMenuBar>
#include<QMenu>
#include<QToolBar>
#include<QAction>
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600,400);
//菜单栏最多只能有一个
//菜单栏创建 已经放在对象树了,不用传对象树
QMenuBar *bar=menuBar();
//将菜单栏放到窗口
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");
//创建菜单项
QAction * neww = fileMenu->addAction("新建");
//添加分隔线
fileMenu->addSeparator();
QAction * open = fileMenu->addAction("打开");
QAction * langu = editMenu->addAction("设置语言");
//工具栏可以有多个 放在对象树,用add...
QToolBar * toolbar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolbar);//把工具栏放在左边
//后期设置允许左右停靠,好像不管用了,影响不大!
toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
//设置不能浮动,这感觉都不重要
toolbar->setFloatable(false);
//设置移动(总开关)
toolbar->setMovable(false);
//工具栏中设置内容 和之前菜单实现同样的功能,里面传入的是QAction
toolbar->addAction(neww);
//添加分割线
toolbar->addSeparator();
toolbar->addAction(open);
toolbar->addSeparator();
toolbar->addAction(langu);
//工具栏中添加kong控件
QPushButton *btn = new QPushButton("控件",this);
toolbar->addWidget(btn);
}
MainWindow::~MainWindow()
{
}
实现如下:
2.状态栏,铆接部件,核心部件
在mainwindow.cpp中t添加写入如下:
//状态栏,最多一个
QStatusBar * stBar = statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel * label1=new QLabel("提示信息",this);
stBar->addWidget(label1);
QLabel * label2 =new QLabel("右侧提示信息",this);
stBar->addPermanentWidget(label2);//设置在右侧
//铆接部件(浮动窗口),可以有多个
QDockWidget *dockWidget =new QDockWidget("浮动",this);
addDockWidget(Qt::BottomDockWidgetArea,dockWidget); //放在底部
//设置后期停靠区域,只允许上下
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea |Qt::BottomDockWidgetArea );
//设置 中心部件,只能一个
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
//总结:可以有多个的是add ,只能一个的是set开头的。
运行如图:
3.资源文件添加
首先把图片存在同文件下,
然后新建Qt
就可以如下添加了!
//使用添加Qt资源 ": + 前缀名 + 文件名 "
ui->actionnew->setIcon(QIcon(":/imag/1.jpg"));
ui->actionopen->setIcon(QIcon(":/imag/hi.png"));
如图:
或者直接绝对路径:[我试了不成功,按理可以的]
ui->actionnew->setIcon(QIcon("C:\python38\newpro\bq1\icon"));
4 模态和非模态对话框
直接看代码和注释!
//对话框 分类
//模态对话框(不可以对其他对话框操作) 非模态对话框(可以对其他对话框操作)
//模态创建 阻塞
//点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//对话框 分类
//模态对话框(不可以对其他对话框操作) 非模态对话框(可以对其他对话框操作)
//模态创建 阻塞
QDialog dlg(this);
dlg.resize(300,200);
dlg.exec();
qDebug()<<"模态对话框弹出了";
//非模态对话框
QDialog *dlg2=new QDialog(this);
dlg2->resize(300,200);
dlg2->show();
//防止内存泄漏
dlg2->setAttribute(Qt::WA_DeleteOnClose);//55号 属性
qDebug()<<"非模态对话框弹出了";
以上代码均写在 Mainwindow.cpp 中
5.消息对话框
示例:
把对点击事件的连接利用信号和槽实现,使用lambda表达式写槽函数
connect(ui->actionnew,&QAction::triggered,[=](){ //消息对话框
// QMessageBox::critical(this,"critical","错误");
//信息对话框
QMessageBox::information(this,"info","信息");
//提问对话框
//参数1: 父亲 参数2:标题 参数3:提示内容 参数四:按键内容 参数5:默认关联回车按键
QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);
// //使用方法:
if(QMessageBox::Save==QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{
qDebug()<<"选择的是保持";
}
else{
qDebug()<<"选择的是取消";
}
//警告对话框
QMessageBox::warning(this,"warning","警告");
});
6 其他标准对话框
代码如下:
//其他标准对话框
//颜色对话框
QColor color = QColorDialog::getColor(QColor(255,0,0));
qDebug()<<"r="<<color.red()<<"g:"<<color.green()<<"b:"<<color.blue();
//文件对话框,
//参数1 父亲 ,参数2:标题, 参数3:默认打开路径 参数4:过滤文件格式
//返回值是 选取的路径
QString str=QFileDialog::getOpenFileName(this,"打开文件","C:\\python38\\newpro\\bq1");
qDebug()<<str;//但是返回是空啊,不过问题不大
//字体对话框
bool flag;
QFont font QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug()<<font.family().toUtf8().data()<<font.pointSize()<<font.bold()<<font.italic();
});
UI–登录框布局
今天学习登录框布局,拖拽代码真的好舒服!!!
效果图:
更改密码不可见:
这些代码都可写,但是直接拖拽很舒服方便!@!!
UI–控件和QListWidget
#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//设置女默认选中,设置已婚默认选中
ui->wombtm->setChecked(true);
ui->readyhun->setChecked(true);
//选中男后,打印信息
connect(ui->manbtm,&QRadioButton::clicked,[=](){
qDebug()<<"选中了男";
});
//多选按钮,2是选中,0是没选中。1是半选中。
connect(ui->cBox,&QCheckBox::stateChanged,[=](int state){
qDebug()<<state;
});
// //利用listWidget写诗
// QListWidgetItem *item = new QListWidgetItem("床前明月光");
// //将一行诗放在listwidget中
// ui->listWidget->addItem(item);
// item->setTextAlignment(Qt::AlignCenter);//设置水平居中
//QStringList QList<string>
QStringList list;
list<<"床前明月"<<"疑是地上"<<"举头望明"<<"低头思故";
ui->listWidget->addItems(list);
}
Widget::~Widget()
{
delete ui;
}
Tree Widget(一个树形框)
程序如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//treeWidget树控件的使用
//设置水平头
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄简介");
QTreeWidgetItem *liItem = new QTreeWidgetItem(QStringList()<<"力量");
QTreeWidgetItem *minItem = new QTreeWidgetItem(QStringList()<<"敏捷");
QTreeWidgetItem *zhiItem = new QTreeWidgetItem(QStringList()<<"智力");
//加载顶层的节点
ui->treeWidget->addTopLevelItem(liItem);
ui->treeWidget->addTopLevelItem(minItem);
ui->treeWidget->addTopLevelItem(zhiItem);
//追加子节点
QStringList heroL1;
heroL1<<"李白"<<"千里不留行,十步杀一人";
QTreeWidgetItem *l1=new QTreeWidgetItem(heroL1);
liItem->addChild(l1);
QStringList heroL2;
heroL2<<"诸葛亮"<<"亮,有一技";
QTreeWidgetItem *l2=new QTreeWidgetItem(heroL2);
minItem->addChild(l2);
QStringList heroL3;
heroL3<<"刘备"<<"汉室可兴";
QTreeWidgetItem *l3=new QTreeWidgetItem(heroL3);
zhiItem->addChild(l3);
}
MainWindow::~MainWindow()
{
delete ui;
}
Table Widget(表格)
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//TabWidget控件
//设置列数
ui->tableWidget->setColumnCount(3);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(5);
//设置正文
// ui->tableWidget->setItem(0,0,new QTableWidgetItem("李白"));
QStringList nameList;
nameList<<"李白"<<"刘备"<<"赵云"<<"朱雀"<<"貂蝉";
QList<QString> sex;
sex<<"男"<<"男"<<"男"<<"女"<<"女";
for(int i=0;i<5;i++)
{
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i])); //[]出错时会直接报错
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(sex.at(i))); //用at出错时抛出异常
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(QString::number(i+19)));
};
}
Widget::~Widget()
{
delete ui;
}
其他常用控件
以下代码,设置stack widget
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//操作stack widget栈控件
//设置默认定位:
ui->stackedWidget->setCurrentIndex(0);
connect(ui->btn_scrollarea,&QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->btn_toobox,QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(2);
});
connect(ui->btn_wiget,QPushButton::clicked,[=](){
ui->stackedWidget->setCurrentIndex(1);
});
}
Widget::~Widget()
{
delete ui;
}
如下: