一、Ui-MainWindow
add开头的,可以添加多个;set开头的只能设置一个。
1.菜单栏 QMenuBar ,最多只能有一个。
QMenuBar *bar = menuBar();
setMenuBar(bar);
//创建菜单
QMenu *fileMenu = bar->addMenu("File");
QMenu *editMenu = bar->addMenu("Edit");
//创建菜单项目
QAction *newAction = fileMenu->addAction("New");
fileMenu->addSeperator();//分割线
2.QToolBar 工具栏,可以有多个
QToolBar *toolBar = new QToolBar(this);
addToolBar(toolBar);
//可设置移动,浮动,停靠位置。
3.状态栏 QStatusBar,最多只能有一个。
QStatusBar *stbar = statusBar();
setStatusBar(stbar);
stbar->addWidget(label1); //左侧显示信息
stbar->addPermanentWidget(label2)//右侧显示信息
4.铆接部件 QDockWidget 可浮动窗口,可以有多个。
QDockWidget *dock = new QDockWidget(this);
addDockWidget(Qt::BottomDockWidgetArea, dock);
//可设置只允许停靠的范围。setAllowedAreas()
5.核心部件 eg:QTextEdit ,只能有一个
QTextEdit *edit = new QTextEdit(this);
setCenteralWidget(edit);
6.图片资源添加。
ui->actionNew->setIcon(QIcon("E:/Image/tom.png"));
a. 将Image资源的文件夹,拷贝到项目代码文件夹中。
b. 添加写文件->Qt->QtResorrceFile,输入资源名称res,生res.qrc;
c. 添加前缀 ‘/’,
d. 添加文件,选择image文件夹中所有图片。然后编译项目。
资源文件添加 语法:": + 前缀名 + 文件名称"
ui->actionNew->setIcon(QIcon(":/Image/Luffy.png"));
二.Dialog 对话框
1.模态对话框QDialog, 不可以对其他窗口进行操作。
#include <QDialog>
connect(ui->actionNew, &QAction::triggered, this, [](){
QDialog dialog(this);
dialog.resize(120, 60);
dialog.exec(); //阻塞UI。
});
2.非模态对话框,可以对其他窗口进行操作。
QDialog *dlg = new QDialog(this);
dialog->resize(120, 60);
dialog->show(); //非模态显示对话框- show().
dialog->setAttribute(Qt::WA_DeleteOnClose);
3.标准对话框 QMessageBox
critical, information, warning,about,question,
返回值表示选择的按钮。
QMessageBox::critical(this,"错误对话框","中间显示的文本");
if(QMessageBox::Save==QMessageBox::question(this,"title","text",
QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Save))
{
qDebug() << "点击了保存";
}else {
qDebug() << "点击了取消";
}
颜色对话框 QColorDialog
QColor color = QColorDialog::getColor(Qt::red)
QFileDialog 选择文件对话框,返回选择文件的路径。
QString filename= QFileDialog::getOpenFileName(this,"打开文件","C:\\User","(*.doc)");
QFontDialog 选择字体对话框,返回QFont。
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",24));
qDebug() << "字体" << font.family().toUtf8().data()
<< "字号" << font.pointSize()
<< "是否加粗" << font.bold()
<< "是否斜体" << font.italic();
三、界面布局
LineEdit 单行编辑框,echoMode可以设置密码输入模式。
Widget 组件,选择水平/垂直布局,更加灵活。
水平垂直的弹簧,可以设置具体的值。
灵活运用弹簧,进行UI布局。
常用按钮组件:
QPushButton 一般的按钮效果,可以设置左边图标。最常用的按钮。
QToolButton 一般用来显示图片。工具按钮。 autoRaise透明凸起效果。
RadioButton 单选按钮, GroupBox分组。使用信号槽监听单选被点击了。
setChecked(bool)
CheckBox 多选按钮。0未选中;1半选中;2选中.
connect(ui->radioBtn_gire, &RadioButton::stateChanged,
this, [=](int state){
qDebug() << "选中了女的";
});
connect(ui->checkbox, &QCheckBox::stateChanged,
this, [=](int state){
qDebug() << state;
});
Item Widgets
listWidget 列表组件
addItem(QListWidgetItem *item)
item.setTextAlignment(Qt::AlignHCenter);//对齐方式
addItems(QStringList list)
QStringList list;
list << "锄禾日当午"<< "汗滴禾下土"<< "锄禾日当午"<< "锄禾日当午";
ui->listWidget->addItems(list);
QTreeWidget 树控件
类似Android的 ExpandListView,能按照组折叠起来。
ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄简介");//设置头
QTreeWidgetItem *itemLi = new QTreeWidgetItem(QStringList()<<"力量");//添加分类
QTreeWidgetItem *itemMin = new QTreeWidgetItem(QStringList()<<"敏捷");
QTreeWidgetItem *itemZhi = new QTreeWidgetItem(QStringList()<<"智力");
ui->treeWidget->addTopLevelItem(itemLi);
ui->treeWidget->addTopLevelItem(itemMin);
ui->treeWidget->addTopLevelItem(itemZhi);
QStringList heroL1 ;
heroL1 << 刚被猪<< "前排坦克,能吸收伤害的同时,造成可观的AOE输出";
heroL2 << 船长<< "前排坦克,能肉能输出能控场的全能英雄";
QTreeWidgetItem *l1 = new QTreeWidgetItem(heroL1);
QTreeWidgetItem *l2 = new QTreeWidgetItem(heroL2);
itemLi.addChild(l1);
itemLi.addChild(l2);
QTableWidget 表格控件
//设置列数
ui->tableWidget->setColumnCount(3);
//设置水平的表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"性别"<<"年龄");
ui->tableWidget->setRowCount(5); //设置行数
QStringList sexList; //类似QList<QString> sexList
QStringList nameList;
nameList << "孙悟空"<< "唐僧"<< "妲己"<< "李白"<< "唐人神";
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.at(i)));
ui->tableWidget->setItem(i, col++, new QTableWidgetItem(QString::number(i+18)));
}
其他常用控件
ScrollArea 类似安卓的 ScrollView
ToolBox 类似qq分组效果。里面可以放不同UI。
TabWidget 切换标签,可以增加删除子页面。
Stacked Widget 栈,可以做主内容区域切换效果。类似常用的ERP软件。
类似QtCreator的主页面。
//点按钮,切换Stacked容器中内容。
connect(ui->btn_scrollArea, &QPushButton::clicked, [=](){
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->btn_toolBox, &QPushButton::clicked, [=](){
ui->stackedWidget->setCurrentIndex(1);
});
connect(ui->btn_tabWidget, &QPushButton::clicked, [=](){
ui->stackedWidget->setCurrentIndex(2);
});
ComboBox 下拉框组件
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("奥迪");
connect(ui->btn_select, &QPushButton::clicked, [=](){
// ui->comboBox->setCurrentIndex(1);
ui->comboBox->setCurrentText("宝马");
});
TextEdit 可以编辑文本颜色,样式。
PlainTextEdit 纯文本编辑
SpinBox 数量设置
Double SpinBox 价格设置。
HorizontalScrollBar
HorizontalSlider
QLabel 文本,图片显示,显示gif图片。
ui->label_img->setPixmap(QPixmap(":/Image/butterfly.png"));
QMovie *movie = new QMovie(":/Image/mario.gif");
ui->label_movie->setMovie(movie);
movie->start();