在这里我们只是对个别控件展开介绍,下面这一篇使用代码实现空空间的布置,在后面我们将先使用ui布局好空间,再用代码实现控件和代码的连接
//QT_7_26_01
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->resize(600,400);
//包含菜单栏,只能有一个
QMenuBar * bar = menuBar(); //一般这里不接受返回值也可以创建成功只是之后要使用,这个东西来做一些操作必须借助其返回值,所以一般这里都是指定好返回值
//将菜单栏放到窗口中
this->setMenuBar(bar);//这里不写this也可以默认就在本窗口下
//菜单栏没有东西则不显示
QMenu *fileMenu = bar->addMenu("文件");
QMenu *editMenu = bar->addMenu("编辑");
//添加菜单项
QAction * newAction1 = fileMenu->addAction("新建");
//添加分割线,添加分割线要借助上一行的文件
fileMenu->addSeparator();
QAction * newAction2 = fileMenu->addAction("打开");
QAction * newAction3 = fileMenu->addAction("属性");
//添加工具栏,工具栏可以有多个
QToolBar * toolBar = new QToolBar(this);//指定父亲
addToolBar(Qt::LeftToolBarArea,toolBar);//Qt::LeftToolBarArea默认停靠范围,这个是靠左,其他的 可以通过查帮助文档晓得
//只允许左右侧停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置不允许浮动,参数是布尔值,不让动就设置false
toolBar->setFloatable(false);
//设置移动(设置之后上面的设置都失效)
toolBar->setMovable(false);
//工具栏添加菜单项
toolBar->addAction(newAction1); //把新建添加到工具栏
toolBar->addSeparator();//添加分割线
toolBar->addAction(newAction2); //把打开添加到工具栏
//状态栏,只能有一个
QStatusBar * stBar = statusBar();
setStatusBar(stBar);//将状态栏放到当前窗口
//
QLabel * label1 = new QLabel("提示信息",this);
stBar->addWidget(label1);//将提示信息放到状态栏位置
QLabel * label2 = new QLabel("右侧提示信息",this);
stBar->addPermanentWidget((label2));
//铆接部件也叫浮动窗口
QDockWidget * dock = new QDockWidget;
//添加铆接部件到窗口中
addDockWidget(Qt::BottomDockWidgetArea,dock);
//api
//设置停靠范围,默认是上下左右都可以停靠,设置完之后只有设置的位置可以停靠
dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
//铆接部件会围着核心部件
//文本编辑器,核心部件只能有一个
QTextEdit *edit = new QTextEdit;
setCentralWidget(edit);
}
效果展示
添加资源文件,使得有图片效果
//QT_7_26_02
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//通过ui寻找控件
//ui->actionnew->setIcon(QIcon("C:/Users/董晨辉/Pictures/Saved Pictures/TIM图片20190704230405.jpg")); //添加图片
//但是本地资源却不能够被共享,也就是路径下不一定有你所有的东西,所以要添加资源文件,到项目中
//使用资源文件": + 前缀名+文件名"
ui->actionnew->setIcon(QIcon(":/picture/untitled.png"));
ui->actionOpen->setIcon(QIcon(":/picture/TIM图片20190704230405.jpg"));
}
步骤如下:
1.首先随便点击左侧窗口(如下),选择”在Explorer中打开“。
2.打开文件之后将你要添加的文件夹放入此目录,我们放入的是picture文件夹
3.左侧点击下图,选择“添加新文件”按钮。
4.选择Qt的Qt Resource From 点击确定,随便起个名字,然后
5.点击添加前缀,一般填/,完了之后,点击添加文件,将你加入的文件夹打开将你添加的照片打开即可,完了之后先编译一遍
6.右侧弹出,你加入的图片,然后再代码中根据图片名加入就可以
上面那段代码的效果如下所示:
已将图片插入。
下面这段代码因为按钮冲突,所以边写边注销,如需尝试请在QT打开
//QT_7_26_03
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
resize(600,400);
ui->setupUi(this);
//点击新建菜单项弹出对话框
connect(ui->actionNew,QAction::triggered,this,[=](){
//对话框有两种对对话框
//模态对话框,非模态对话框
//QDialog dlg(this);
//dlg.resize(300,200);
//启动模态对话框
//dlg.exec();//阻塞
//qDebug()<<"垃圾你好";
//非模态对话框
//QDialog dlg2(this);
//QDialog * dlg2 = new QDialog(this);
//dlg2->resize(300,200);
//dlg2->show();
//为了防止内存泄漏,设置属性
//dlg2->setAttribute(Qt::WA_DeleteOnClose);//在点击对话框的叉子的时候,就把创建的内存释放
//上面都是我们自定义的对话框,实际上系统还为我们创建了好多多对话框
//使标准的对话框,因为是静态成员变量可以直接使用类来访问,也可以通过对象来访问但是没有必要
//QMessageBox::critical(this,"错误","critical");//这个是最简单的三个参数的模态对话框
//QMessageBox::information(this,"信息","information");
//询问对话框,第四个参数属于询问,有很多默认选项可以从帮助手册中去查找,我们这里选择的是询问 ,保存还是取消,关于第五个参数是一个默认的选项,如果没有第五个参数那么,第四个参数谁在前谁就是默认选项,有了第五个参数,第五个参数肯定得是第四个参数中的其中一个就变成了默认的参数
//QMessageBox::question(this,"问题","question",QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Cancel);
//参数1父亲,2标题,3提示内容4按键内省5.关联回车
// if(QMessageBox::Save == QMessageBox::question(this,"问题","question",QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Cancel))
// {
// qDebug()<<"保存";
// }
// else
// {
// qDebug()<<"取消";
// }
//QMessageBox::warning(this,"警告","waring");
//QColor color = QColorDialog::getColor(QColor(255,0,0));
//可以通过返回值获取用户所选择的红,绿,蓝,的分量
//qDebug()<<color.red()<<color.green()<<color.blue();
//文件对话框QFileDialog,
//QString path = QFileDialog::getOpenFileName(this,"打开文件","C:/Users/董晨辉/Pictures/Saved Pictures","(*.jpg)");//打开文件后会返回文件的路径
//qDebug()<<path;
});
}
下图已经涉及代码和ui交互的控制,下图是ui(弹簧可以在右侧设置高度和宽度,但是设置之前要先设置弹簧状态为不能伸缩)
//QT_7_26_04
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setFixedSize(400,300);
setWindowTitle("用户登陆");
}
效果如图:
下面则主要是对一些控件的测试,以及用代码对按钮实行的监控
//QT_7_26_05
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//默认选中,我们默认选中单选按钮性别中的男
ui->man->setChecked(true);
//点击女的就打印一行话
connect(ui->woman,&QRadioButton::clicked,[](){
qDebug()<<"新年快乐";
});
//在多选框进行监听选中状况,选中就打印1
connect(ui->checkBox_3,&QCheckBox::clicked,[](){
qDebug()<<"1";
});
//另外一种有关监听的独特的用法,选中就打印2,未选中就打印0
connect(ui->checkBox_3,&QCheckBox::stateChanged,[](int val){
qDebug()<<val;
});
//利用listwidget写诗
QListWidgetItem * item = new QListWidgetItem("锄禾日当午");
//使诗默认排版在中间,设置对齐方式,可以去帮助文档查看
item->setTextAlignment(Qt::AlignHCenter);
ui->listWidget->addItem(item);
//第二种添加文字的方式
//一次性添加很多,利用list容器,但是无法设置剧中
QStringList list;
list<<"锄禾日当午"<<"汗滴禾下土"<<"谁之盘中餐"<<"粒粒皆辛苦";
ui->listWidget->addItems(list);
}
ui图
效果图:
点击按钮便可以根据代码中给出的返回值进行监控打印
下面我们只是为了测试一个控件:
在ui中进行添加,然后就可以在代码中实现控制
//QT_7_26_06
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//添加头
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄姓名"<<"英雄介绍");
//添加项目
QTreeWidgetItem * list1 = new QTreeWidgetItem(QStringList()<<"力量");
ui->treeWidget->addTopLevelItem(list1);
QTreeWidgetItem * list2 = new QTreeWidgetItem(QStringList()<<"敏捷");
ui->treeWidget->addTopLevelItem(list2);
QTreeWidgetItem * list3 = new QTreeWidgetItem(QStringList()<<"智力");
ui->treeWidget->addTopLevelItem(list3);
//追加子项目
QStringList hero1;
QStringList hero2;
QStringList hero3;
QStringList hero4;
QStringList hero5;
QStringList hero6;
hero1<<"刚被猪"<<"前排坦克,能在吸收伤害的同时造成客观的范围输出";
hero2<<"船长"<<"前排坦克,能肉能输出能控场的全能英雄";
hero3<<"月骑"<<"中排物理输出,可以使用分裂利刃攻击多个目标";
hero4<<"小鱼人"<<"前排战士,擅长偷取敌人的属性来增加自身的战斗力";
hero5<<"死灵法师"<<"前排法师坦克,魔法抗性较高,拥有治疗技能";
hero6<<"巫医"<<"后排辅助法师,可以使用奇特的巫术诅咒敌人与治疗队友";
QTreeWidgetItem * li1 = new QTreeWidgetItem(hero1);
list1->addChild(li1);
QTreeWidgetItem * li2 = new QTreeWidgetItem(hero2);
list1->addChild(li2);
QTreeWidgetItem * li3 = new QTreeWidgetItem(hero3);
list2->addChild(li3);
QTreeWidgetItem * li4 = new QTreeWidgetItem(hero4);
list2->addChild(li4);
QTreeWidgetItem * li5 = new QTreeWidgetItem(hero5);
list3->addChild(li5);
QTreeWidgetItem * li6 = new QTreeWidgetItem(hero6);
list3->addChild(li6);
}
效果如图:
利用小箭头实现缩放
下面我们学习控件,用代码实现控制
在ui中添件以及两个按钮pushbutton
//QT_7_26_07
idget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//QTableWidegt控件使用
//告诉控件一共有多少列
QStringList list;
list<<"姓名"<<"性别"<<"年龄";
ui->tableWidget->setColumnCount(list.size());
//设置水平方向的头
ui->tableWidget->setHorizontalHeaderLabels(list);
//准备数据
QStringList namelist;
namelist<<"李白"<<"安琪拉"<<"东皇太一"<<"小旋风"<<"李旭";
//设置行数
ui->tableWidget->setRowCount(namelist.size());
//设置正文
//ui->tableWidget->setItem(0,0,QTableWidgetItem("亚瑟"));
//准备性别
QStringList sexlist;
sexlist<<"男"<<"女"<<"男"<<"女"<<"男";
//准备年龄
QStringList nianling;
nianling<<"20"<<"22"<<"44"<<"60"<<"5";
//使用循环添加信息
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(sexlist[i]));
//添加年龄
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nianling[i]));
//int 转 string
//QString::number(int);
}
//点击按钮添加信息
connect(ui->btn1,&QPushButton::clicked,[=](){
//先判断有没有赵云,有的话就不添加了
bool ifempty = ui->tableWidget->findItems("赵云",Qt::MatchExactly).empty();
if(ifempty)
{
ui->tableWidget->insertRow(0); //这一行做的是插入操作,没有这一行的话就是替换操作
ui->tableWidget->setItem(0,0,new QTableWidgetItem("赵云"));
ui->tableWidget->setItem(0,1,new QTableWidgetItem("男"));
ui->tableWidget->setItem(0,2,new QTableWidgetItem("28"));
}
else //打印警告信息
{
QMessageBox::warning(this,"警告","已经添加过了");
}
//点击按钮删除赵云
connect(ui->btn2,&QPushButton::clicked,[=](){
bool ifempty = ui->tableWidget->findItems("赵云",Qt::MatchExactly).empty();
if(ifempty)
{
QMessageBox::warning(this,"警告","已经删除过了");
}
else
{
//找到所要删除的行
int row = ui->tableWidget->findItems("赵云",Qt::MatchExactly).first()->row();
//ui->tableWidget->findItems("赵云",Qt::MatchExactly)返回一个链表
//.first()从链表中找第一个出现赵云的位置
//->row();返回其所在行
//按行删除
ui->tableWidget->removeRow(row);
}
});
});
}
效果如下:
可点击按钮进行增加和删除
添加或者删除之后如果重复添加或者删除会有提示模态窗口