前言
QT一开始在1991年被奇趣公司研发,创建的目的就是实现GUI图形界面开发与非GUI的开发。后来被诺基亚收购了,维护至今。当然在诺基亚手里也是越发展越好。
好了QT就介绍这么多了。我们直接上干货:我将从控件的使用方式、QT的信号与槽、项目源码剖析、界面的美化与布局、动画特效处理、音视频播放(有个简单的小项目)、QCharts的使用、网络通讯之TCP&UDP、线程的介绍与实现、结尾(娱乐小项目);会从这10个连载介绍QT。
文章目录
一、UI创建控件
1.1:从.UI文件中拖拽控件
如下在 .UI 文件中拖出控件至窗体
1.2:赋予控件功能(转到槽)
利用转到槽功能实现:点击按钮,关闭窗体的事件
1.3:效果演示
二、代码创建控件
代码实现控件,需要利用到connect函数进行功能实现。当然控件的库如果不清楚的可以去QT的手册中查询。
2.1:按钮
代码如下(示例):move(设置控件位置) = setGeometry(); settext(设置按钮文本); setFlat(透明背景);
voidMainWindow::PushButton(){//标准按钮只能用键盘中的空格触发
QPushButton *pushbutton =newQPushButton(this);
pushbutton->setText("标准按钮");connect(pushbutton,&QPushButton::clicked,this,[=](){qDebug()<<"使用";});//设置默认 可以用回车触发
QPushButton *pushbutton2 =newQPushButton(this);
pushbutton2->move(150,0);
pushbutton2->setText("默认按钮");
pushbutton2->setDefault(true);connect(pushbutton2,&QPushButton::clicked,this,[=](){qDebug()<<"使用2默认";});//设置自动默认 可以用回车触发
QPushButton *pushbutton3 =newQPushButton(this);
pushbutton3->move(300,0);
pushbutton3->setText("自动默认按钮");
pushbutton3->setAutoDefault(true);connect(pushbutton3,&QPushButton::clicked,this,[=](){qDebug()<<"这是一个自动默认按钮";});
pushbutton2->setFlat(true);//透明背景}
2.2:文本框
代码如下(示例):QIntValidator (验证器) setMaxLength(限制位) append(追加文本)
voidMainWindow::TextBox(){//单行文本
QLineEdit *lineedit =newQLineEdit(this);
lineedit->setGeometry(0,50,100,50);
QIntValidator *val=newQIntValidator(0,3,this);//验证器:设置显示整数,并且有效的展示3位数
lineedit->setValidator(val);
lineedit->setInputMask("HHH.HHH.HHH.HHH");//进行设置标记
lineedit->setMaxLength(10);//限制输入10位数//lineedit->setEchoMode(QLineEdit::Password); //设置密码显示//多行文本
QTextEdit *textEdit =newQTextEdit(this);
textEdit->setGeometry(110,50,100,100);
textEdit->setText("第一行内容<br/>第二行内容");//利用HTML的语法进行切换
textEdit->append("第三行内容\n第四行内容");//追加利用\n进行切换//纯文本 不允许HTML语言
QPlainTextEdit *PlainTextEdit =newQPlainTextEdit(this);
PlainTextEdit->setGeometry(220,50,100,100);
PlainTextEdit->setPlainText("第一行内容\n第二行内容");}
2.3:进度条
代码如下(示例):QProgressBar
//进度条voidMainWindow::ProgressBar(){
QProgressBar *progressbar =newQProgressBar(this);
progressbar->setMaximum(100);//设置最大值
progressbar->setMinimum(0);//设置最小值
progressbar->setValue(50);//设计基础值
progressbar->setGeometry(50,160,300,20);//设置位置与大小
progressbar->setOrientation(Qt::Horizontal);//设置方向 Vertical垂直的
progressbar->setInvertedAppearance(true);//外观倒置//设置文本内容
QProgressBar *progressbar2 =newQProgressBar(this);
progressbar2->setTextVisible(true);//文本框显示
progressbar2->setAlignment(Qt::AlignRight);
progressbar2->setMaximum(100);//设置最大值
progressbar2->setMinimum(0);//设置最小值
progressbar2->setValue(50);//设计基础值
progressbar2->setGeometry(50,190,300,20);//设置位置与大小
progressbar2->setFormat(QString("重量:%1KG").arg(QString::number(30.22,'f',2)));}
2.4:列表型控件
代码如下(示例):QListWidget QTreeWidget QTableWidget
voidMainWindow::ListContorl(){//与之配合 QListWidgetItem
QListWidget *listWdiget =newQListWidget(this);
listWdiget->setGeometry(0,300,250,200);//行:两种添加字符的方法
listWdiget->addItem("hello");
listWdiget->addItem(newQListWidgetItem(" QT "));
listWdiget->addItem("☺");//设置视图模式
listWdiget->setViewMode(QListView::IconMode);
QLabel *label =newQLabel(this);
label->setGeometry(0,610,250,200);connect(listWdiget,&QListWidget::currentTextChanged,label,&QLabel::setText);//获取选中文本内容//treewidget 与之配合 QTreeWidgetItem 要有:标题、根、子节点(项目)
QTreeWidget *treewidget =newQTreeWidget(this);
treewidget->setGeometry(270,300,250,200);//设置树的头 如果只有一个头就用 setHeaderLabel()
QStringList head;
head<<"科目"<<"分数";
treewidget->setHeaderLabels(head);//添加根节点
QStringList name;
name<<"QT";
QTreeWidgetItem *root =newQTreeWidgetItem(treewidget,name);//注意这里是继承的关系//添加子节点
QStringList score;
score<<"数学"<<"100";
QTreeWidgetItem *node =newQTreeWidgetItem(root,score);//这里是继承上面的根节点//因为是树形结构所以我们在添加一个节点
root->addChild(node);//tabwidget 与之配合 QTableWidgetItem 他是一个表格控件 设置行列数量 在设置标题
QTableWidget *tablewidget =newQTableWidget(this);
tablewidget->setGeometry(540,300,250,200);
tablewidget->setRowCount(3);//设置行数
tablewidget->setColumnCount(3);//设置列数
QStringList tablewidgettitle;
tablewidgettitle<<"姓名"<<"性别"<<"年龄";
tablewidget->setHorizontalHeaderLabels(tablewidgettitle);//设置title//设置内容
tablewidget->setItem(0,0,newQTableWidgetItem("小孩"));
tablewidget->setItem(0,1,newQTableWidgetItem("男"));
tablewidget->setItem(0,2,newQTableWidgetItem("15"));}
2.5:调整框与滚动条
代码如下(示例):QSpinBox QSlider
voidMainWindow::SpinBox_And_Slider(){//调整框
QSpinBox *spinbox =newQSpinBox(this);
spinbox->setMaximum(100);
spinbox->setMinimum(0);
spinbox->setGeometry(50,250,100,30);
spinbox->setAccelerated(true);//设置增快 按下时间越长,增长速度越快
spinbox->setSingleStep(5);//设置步长 一次走几个数字
spinbox->setWrapping(true);//走到最大值或最小值后可以滚动回来
spinbox->setPrefix("前缀");//设置前缀
spinbox->setSuffix("后缀");//设置后缀//实现功能利用调整框将进度条绑定connect
QSlider *slider =newQSlider(this);
slider->setGeometry(160,250,200,30);
slider->setMinimum(0);
slider->setMaximum(100);
slider->setOrientation(Qt::Horizontal);//设置横向
slider->setSingleStep(5);//设置步长// connect(spinbox,&QSpinBox::valueChanged,this,[=](int x){// slider->setValue(x);// });// connect(slider,&QSlider::valueChanged,this,[=](int x){// spinbox->setValue(x);// });//上面为lambda表达式!不推荐connect(spinbox,&QSpinBox::valueChanged,slider,&QSlider::setValue);connect(slider,&QSlider::valueChanged,spinbox,&QSpinBox::setValue);}
2.6:效果演示
总结
QT的基础功能网上也有很多教程,以上代码也是在很久以前总结的(可以实现) 注意别忘了
头文件
在学习的过程中,要实际上手敲一敲才会印象深刻,也才能发现没有体现的错误。
如果在实现上出现了问题,欢迎大家留言,会一一解答。
在我学习过程中觉得:有图形拖拽了我干嘛还要学习代码实现控件呢?多此一举么不是,还这么麻烦!当然了技多不压身么,代码实现相对于会更灵活。对于后面的自会控件也是起到了重要的作用。
版权归原作者 矩阵君 所有, 如有侵权,请联系我们删除。