文章首发在博主知乎
作业1
需求:点击按钮打开,弹出一个新的菜单,单击按钮关闭,关闭新开的菜单
步骤:
1.新建一个QMainWindow项目
2.在1的基础上新建一个类QMainWIndow2
在Q.h中添加Q2对象和定义函数
代码语言:javascript复制//实例化对象
private:
QPushButton *btn1=new QPushButton("打开",this);
QPushButton *btn2=new QPushButton("关闭",this);
MainWindow2 w2;
//实例化方法
private slots:
void showMainWindow2();
void closeMainWIndow2();
在Q.cpp中实现
代码语言:javascript复制MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setFixedSize(600,600);
//设置第一个pushbutton的属性
btn1->move(100,100);
btn1->resize(100,50);
connect(btn1,&QPushButton::clicked,this,&MainWindow::showMainWindow2);
//第二个pushbutton的属性
btn2->move(100,200);
btn2->resize(100,50);
connect(btn2,&QPushButton::clicked,this,&MainWindow::closeMainWIndow2);
}
void MainWindow::showMainWindow2()
{
w2.show();
}
void MainWindow::closeMainWIndow2()
{
w2.close();
}
结果显示:
4. QMainWindow
4.1 菜单栏和工具栏
Ubuntu下不显示菜单栏解决办法:
blog.csdn.net/z95295740
解决Ubuntu下Qt不能输入中文的方法:
blog.csdn.net/future_ai
中文字体下载链接:
github.com/fcitx/fcitx-
Ubuntu在root下操作:
360doc.com/content/16/0
基本操作:
代码语言:javascript复制MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//窗口大小
resize(600,400);
//菜单栏只能有一个
//创建菜单栏
QMenuBar *bar=menuBar();
//菜单栏放在系统中
setMenuBar(bar);
//创建菜单
QMenu *fileMenu=bar->addMenu("文件");
QMenu *editMenu=bar->addMenu("编辑");
//创建菜单项
QAction *newAction=fileMenu->addAction("新建");
//添加分割线
fileMenu->addSeparator();
QAction *openAction= fileMenu->addAction("打开");
//工具栏可以有多项
QToolBar *toolBar=new QToolBar(this);
addToolBar(Qt::LeftToolBarArea,toolBar);
//只允许左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);
//设置浮动
toolBar->setFloatable(false);
//设置移动(总开关)
toolBar->setMovable(false);
//工具栏设置内容
toolBar->addAction(newAction);
//分割线
toolBar->addSeparator();
toolBar->addAction(openAction);
//工具栏中添加控件
QPushButton *btn=new QPushButton("aa",this);
toolBar->addWidget(btn);
}
MainWindow::~MainWindow()
{
}
如图:
4.2 状态栏和浮动窗口
代码语言:javascript复制 //状态兰,也只能有一个
QStatusBar *stBar=statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel *label=new QLabel("提示信息",this);
stBar->addWidget(label);
//设置在右侧提示信息
QLabel *label2=new QLabel("右侧提示信息",this);
stBar->addPermanentWidget(label2);
//浮动窗口 可以有多个
QDockWidget *dockWider=new QDockWidget("浮动",this);
addDockWidget(Qt::BottomDockWidgetArea,dockWider);
//设置后期停靠区域,只允许上下停靠
dockWider->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
//设置中心部件 ,只能有一个
QTextEdit *edit=new QTextEdit(this);
setCentralWidget(edit);
显示:
4.3 添加资源文件
ui->自动手动添加
1.把文件拿出来拷贝到项目目录下
选中mainWindow.cpp右键->在Explor中显示->粘贴进来(显示包含的目录)
2.在Q1_Resource最上面右键->添加新文件->Qt->qt resource file->设置名字->生成res.qrc
3.离开res.qrc后无法重新返回,此时右键res.qrc->open in editor->添加前缀->添加文件(全选1中的图片打开,此时全部加载进去)->点击编译
4.编辑代码
代码语言:javascript复制 //使用添加资源文件 “: 前缀名 文件名”
ui->actionnew->setIcon(QIcon(":/data/01.pgm"));
ui->actionopen->setIcon(QIcon(":/data/02.pgm"));
结果显示:
4.4 添加对话框
需求:点击新建按钮,弹出一个对话框
继续上面代码:
代码语言:javascript复制 //点击新建按钮,弹出一个对话框
connect(ui->actionnew,&QAction::triggered,[=](){
//对话框分类
//模态对话框(不可以对其他窗口进行操作),非模态对话框(可以对其他窗口进行操作)
//模态创建 阻塞
QDialog dlg(this);
dlg.resize(200,100);
dlg.exec();
qDebug()<<"模态对话框建立";
//非模态,创建
QDialog dlg2(this);//栈上自动销毁
dlg2.show();
QDialog *dlg3=new QDialog(this);
dlg3->resize(200,100);
dlg3->show();
//设置属性,关闭时候释放,防止内存泄漏
dlg3->setAttribute(Qt::WA_DeleteOnClose);
qDebug()<<"非模态创建";
显示:
4.5 消息对话框
比如弹出的警告,消息,提问等
继续上文代码:
代码语言:javascript复制 //消息对话框
//错误对话框
// QMessageBox::critical(this,"critical","错误");
//信息对话框
// QMessageBox::information(this,"informatio","信息");
//提问对话框
if(QMessageBox::Save== QMessageBox::question(this,"ques","提问",
QMessageBox::Save | QMessageBox::Cancel))
{
qDebug()<<"保存";
//执行工作
}
else
{
qDebug()<<"取消";
//执行工作
}
显示:
4.6 其他标准对话框
继续上文代码:
代码语言:javascript复制 //其他标准对话框
//颜色对话框
// QColor color=QColorDialog::getColor(QColor(255,0,0));
// qDebug()<<"r= "<<color.red()<<"g= "<<color.green()<<"b= "<<color.blue();
//文件对话框
//参数1 父亲,参数3 标题,参数3 打开路径,参数4 过滤文件格式
//返回值是选取的路径
QString str=QFileDialog::getOpenFileName(this,"打开文件","/home/lyy","(*.txt)");
qDebug()<<str;
显示:
5. 界面布局
5.1 登录界面
ui界面编程
步骤:
1.选择两次 Label: Line Edit,分别改名字
2.选择两个Push Button
3.选择Widget进行水平对齐
4.选择最大的Widget对以上三个进行竖值对齐
5.选择Horizontal Spacer左右各一个弹簧,进行居中
6.但是登录和退出之间太近了,再插一个弹簧。可以改弹簧属性
7.对以上布局不满意,选中最大的框框,点击打破布局
8.选择Widget,将四个一起放进去,点击删格布局
9.点击各个按钮进行属性设定,比如窗口固定大小,密码隐藏等
显示:
5.2 控件-按钮
Button
1.tool button
添加图片,在ui中天骄
添加资源后,点击按钮,查找icon中添加资源后插入图片
实现左边是图像,右边是用户名
2.Radio Button
单选框,只能单选
比如男女,已婚未婚,选择Group Box进行分组,再做个垂直布局
代码语言:javascript复制 //设置默认男
ui->rbtnMan->setChecked(true);
//选中女后打印信息
connect(ui->rbtnWoman,&QRadioButton::clicked,[=](){
qDebug()<<"选中女!";
});
3.Check Box
多选按钮,可以多选
问卷调查等
代码语言:javascript复制 //多选按钮,2是选中,0是未选中
connect(ui->CBox,&QCheckBox::stateChanged,[=](int state){
qDebug()<<state;
});
显示:
5.3 Item Widgets
1.List Widget
添加文本框,比如诗
代码语言:javascript复制 //利用listWidget写诗
QListWidgetItem *ll=new QListWidgetItem("处和日当无");
//将一行放入listWidget
ui->listWidget->addItem(ll);
//设置水平居中
ll->setTextAlignment(Qt::AlignHCenter);
//第二种方法添加
//QStringList list<string>
QStringList list;
//重载类一个左移运算符
list<<"处和日当无"<<"韩地喝下图"<<"设置盘中参"<<"丽丽戒心库";
ui->listWidget->addItems(list);
显示:
2.Tree Widget
设置带树,子节点的界面
代码语言:javascript复制//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 heroli;
heroli<<"刚被猪"<<"坦克,8公里射程";
QTreeWidgetItem *ll=new QTreeWidgetItem(heroli);
liItem->addChild(ll);
显示:
3.table Widget
做成类似于课程表那种
代码语言:javascript复制 //table widget
//做表格
//设置列数
ui->tableWidget->setColumnCount(3);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
//设置行数
ui->tableWidget->setRowCount(5);
//设置正文,0行0列
// ui->tableWidget->setItem(0,0,QTableWidgetItem("亚瑟"));
QStringList namelist;
namelist<<"它色"<<"赵云"<<"关于"<<"张飞"<<"花木兰";
QList<QString> sexlist;
sexlist<<"男"<<"女"<<"女"<<"女"<<"男";
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]));
//int 转Qstring
ui->tableWidget->setItem(i,col ,new QTableWidgetItem(QString::number(i 18)));
}
显示:
6. 其他控件
1.Scroll Area
滚动区域框
2.Tool Box
3.Tab Widget
网页
4.Stacked Widget
笔记如下:
参考:黑马程序员