当前位置: 首页 > 工具软件 > Qt Creator > 使用案例 >

【Qtcreator】qtcreator的基本使用方法

阎成天
2023-12-01

简介:qtcreator是跨平台的qt IDE,集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 gdb 调试以及qmake 构建工具等,具有图形可视化功能,支持的系统包括Linux,Mac,Windows。它的编程环境采用c++语言,界面采用信号与槽机制,操作简单,直接拖拽即可,能够实现很多功能,以下是我在研一下嵌入式课程学习中对qtcreator使用方法的总结。

1.lineEdit 输入框接收与输出

标准输入输出功能: QDebug
QString name = ui->lineEdit(部件名称)->text();   //接收字符串,创建一个name变量来接收lineEdit中的字符串
ui->lineEdit->setText(QString::number(c));    //输出字符串,将int整型c转化为字符串c输出到lineEdit的输入框中
qDebug()<<"登录成功"<<endl;

2. label 标签的接收与输出 按钮Push Button

ui->label->setText("xxx");			//输出字符串
QString name = ui->label->text();	//接收字符串 放到name中

3.textEdit 的输出和读取以及按钮按下时true,false交替

textEdit
第一种  文本形式赋值    ui->textEdit->setText("abc");
第一种  文本形式获取	qDebug() << ui->textEdit->toPlainText() << endl;
	
第二种  html格式赋值    ui->textEdit->setHtml("<strong>22222</strong>");  //加粗
第二种  html格式获取	qDebug() << ui->textEdit->toHtml() << endl;
	
将按钮button属性checkable和checked打勾,同时转到槽设置为click(bool),可实现true和false交替进行,后面在播放器可以用到,按一下播放,再按一下暂停 

4.关闭ui界面

this->close();

5.手动编译过程

5.1 生成解决方案 qmake -project
5.2 生成Makefile文件 qmake
5.3 生成最终可执行程序 make

6.手动编写信号与槽 ( 多个部件一起执行一个事件可以用connect连接同一个槽函数,然后只编写这一个槽函数就可以了)

产生者(按钮等)    绑定(connect)    接受者
QObject::connect(ui->btn_data,SIGNAL(clicked(bool)),this,SLOT(doProcessClick(bool)));
					产生者          信号             接受者     槽函数(先声明)

7.关于QString类的字符串的操作(计算器的实现)

QString 字符串   QStringList  字符串列表
QString a;
QStringList b;

b.insert(0,a);  	//把a字符串放在字符串列表b的0索引位置上  左边为0索引
a.clear();      	//清空字符串a
b.count()			//字符串列表b中字符串的个数
b.at(1) == "+"		//判断列表b的第一个索引是否为+字符if(b.at(1) == "+"){}
QString(b.at(0)).toInt()   //将字符串列表b的第0个索引转化为QString类型,再转化为int整型    QString->int
QString::number(c)			//将int整型的c转化为QString类型							 int->QString
currentNum.toInt			//将字符串currentNum转化为整型数据						 QString->int
toStdString()				//包含头文件string.h std::string str = a.toStdString();  QString->string 
append() 尾部字符串拼接    //s.append(c)   append函数是向string的后面追加c字符或字符串
					   //append(c,3); // 把c类型字符串s的前n个字符连接到当前字符串结尾
arg   QString i = "Test" ,QString total = "totalTest"   arg(i)替代%1 , arg(total) replaces %2
split  				// 分割字符串 name.split(" ",n)  即以空格作为分隔符,包含\n,分割成n+1个
chop				//字符串倒位剔除 a.chop(int n)   从最高索引开始剔除n个字符
a.remove(0,1)		//清除掉字符串a中的从第0个索引开始向右一个      a.remove(2.3) //从2索引开始向右清除3个字符
'1'+'2' = '12'      //字符串直接相加 拼接  


void Widget::on_btn_sum_clicked()
{
	if(b.count()==2){
		b.insert(2,a);
		if(b.at(1) == "+"){
			int v3 = QString(b.at(0)).toInt() + QString(b.at(2)).toInt();
			ui->result->setText(QString::number(v3));
		}
	}
}	

8.定时器QTimer 三步走–设置定时器对象–connect事件绑定–启动定时器

QProcessBar 和 QTimer的联合使用
	
.h文件private声明定时器 
	private slots:
		void doProcesstimeout();
		void doProcessstart(bool);
		void doProcessend(bool);
	private:
		QTimer *mytimer;  
		int num ;
	
.cpp文件中   
	mytimer = new QTimer(this); 
	connect(mytimer,SIGNAL(timeout()),this,SLOT(doProcesstimeout()));
		
		connect(ui->btn_start,SIGNAL(clicked(bool)),this,SLOT(doProcessstart(bool)));		
		connect(ui->btn_end,SIGNAL(clicked(bool)),this,SLOT(doProcessend(bool)));
	void Widget::doProcessstart(bool){
		mytimer->start(100);   //启动定时器,并且0.1s触发一次定时器,即触发一次doProcesstimeout事件
		}
	void Widget::doProcessend(bool){
		mytimer->stop();		//定时器停止
		}
	void Widget::doProcesstimeout(){
		num ++;
		ui->progressBar->setValue(num){
		}
	
--->>QTimer *mytimer = new QTimer;
		connect(mytimer,SIGNAL(timeout()),this,SLOT(doProcesstimeout()));
		mytimer->start(100); 

9. toolButton 设置图标和设置下拉框

#include <QMenu>
	ui->toolButton->setIcon(QIcon("../test06_toolbar/DD1.png"));
	ui->toolButton->setIconSize(QSize(300, 300));  					//设置图片大小	
	图标按下有一些下拉框(菜单)
	QMenu *menu = new QMenu(this);  							//菜单 有一个下拉框
	QAction * a1 = menu->addAction(QIcon("../test06_toolbar/DD1.png"),"声音1",this,SLOT(doProcess()));
	a1->setObjectName("声音1");
	
	menu->addAction(QIcon("../test06_toolbar/DD2.png"),"声音2",this,SLOT(doProcess()));
	menu->addAction(QIcon("../test06_toolbar/DD3.png"),"声音3",this,SLOT(doProcess()));
	menu->addAction(QIcon("../test06_toolbar/DD4.png"),"声音4",this,SLOT(doProcess()));
	ui->toolButton->setMenu(menu);
	
void Widget::doProcess(){
	QAction *action = (QAction *)this->sender();
	qDebug()<<action->objectName()<<endl;	//即添加的objectname内容,没有设置对象名输出则为空""
	qDebug()<<action->text()<<endl;			//text内容即菜单标签上的内容(声音1/2/3)
	//qDebug()<<"声音1"<<endl;
}

10.checkBox 多选按钮 RadioButton单选按钮

转到槽,clicked类型
void Widget::on_cbox_1_clicked()
	{
	if(ui->cbox_1->isChecked()){			//只有该按钮被选中时才输出
		qDebug()<<ui->cbox_1->text()<<endl;  //输出的是按钮cbox_1上的文本内容
	}
	}

void Widget::on_rbtn_1_clicked()
	{
	if(ui->rbtn_1->isChecked()){			//只有该按钮被选中时才输出
		qDebug()<<ui->rbtn_1->text()<<endl;  //输出的是按钮rbtn_1上的文本内容
	}
	}

11.qsrand,qrand 数码管的使用,产生随机数和随机数的比较

#include <QTime>
	//产生种子
	qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));   //不产生种子则每次产生的随机数都一样
	for (int i=0;i<10;i++) {
		qDebug()<<qrand()%100<<endl;   				//0-99的随机数
		}

void Widget::on_btn_compare_clicked()
	{
	int a = currentNum.toInt();						//字符串转化为整型类型
	if (a>num)
	{
		ui->textEdit->setText("你输入的值过大");
		currentNum.clear();
		ui->lcdNumber->display(0);
	}
	else if (a==num)
	{
		ui->textEdit->setText("回答正确");
		num = rand()%100;
		currentNum.clear();
		ui->lcdNumber->display(0);
	}
	else
	{
		ui->textEdit->setText("你输入的值小了");
		currentNum.clear();						//字符串清零
		ui->lcdNumber->display(0);				//lcdNumber数码管显示
	}
}	

12.QMovie动画显示

//动画显示gif
	QMovie *movie = new QMovie("../test08_formtoform/1.gif"); //图片路径 注意是../或直接写上绝对路径
	ui->label->setMovie(movie);			//在label中播放gif动画
	ui->label->setScaledContents(true);	//自动缩放以适应控件大小
	movie->start();
	this->showFullScreen(); 			//如果需要全屏显示
	
//动画停止,清除(可以直接清除),并换为其他的静态图的过程:
	mov->stop();
	mov->deleteLater();
	ui->label->setStyleSheet("border-image:url(:/new/prefix1/left_green.png)");

13. 多个窗体行切换 以及 信号与槽的理解

1.第一个窗体产生第二个窗体,在第一个窗体中include第二个窗体的头文件,同时创建出第二个类的全局指针对象, 
	#include "twoform.h";
	twoForm *tf1 ; tf1 = new twoForm;
	要显示第二个窗口,同时第一个窗口隐藏,在第一个窗体的槽函数中输入   
	tf1->show();this->hide();
2.第二个窗体返回到第一个窗体,在第二个窗体中.h文件中定义信号,同时在第二个窗体的button的槽函数中发出这个信号,并第二个窗体自身隐藏
	signals:
		void SignalShowOneForm();
	emit SignalShowOneForm();
	this->hide();
	再在第一个窗体中connect这个信号,同时定义第一个窗体的槽函数来处理这个信号,信号的发出者是第二个窗体的指针对象tf1
	connect(tf1,SIGNAL(SignalShowOneForm),this,SLOT(doProcessTwoFormRequest));
	void oneform::doProcessTwoFormRequest(QString str){
		this->show();
	}

14. 用QTimer和QLabel和QMovie实现倒计时,动画播放

	ui->label->hide();  	//隐藏label
	ui->lcdNumber->hide();  //隐藏lcdNumber
实现功能:定时器计时在数码管上显示,计时结束后,lcd隐藏,label显示动画gif图
void Widget::init(){
	//倒计时///
	index = 10;
	ui->lcdNumber->display(index);
	mytimer = new QTimer(this);
	connect(mytimer,SIGNAL(timeout()), this, SLOT(doProcesstimeout()));
	mytimer->start(1000);

	///动画播放/
	movie = new QMovie("../test09_bomb/boom.gif");
	ui->label->setMovie(movie);
	ui->label->setScaledContents(true);}
void Widget::doProcesstimeout(){
	index--;
	if(index==0)
	{
		ui->lcdNumber->hide();
		ui->label->show();
		mytimer->stop();
		movie->start();
		this->showFullScreen();
	}
	else
	{
		ui->lcdNumber->display(index);
	}
}

15. QMessageBox 弹出一个子窗口dialog,并对子窗口里面的选项进行处理

#include<QMessageBox>
	点击一个按钮弹出一个文本框,可以定义文本框的标题,内容,和里面的选项
	//about
	QMessageBox::about(this, "关于", "own by xxx xxx xxx");
	
	//information
	QMessageBox::StandardButton ret = QMessageBox::information(this, 
				"information", "xxxx",QMessageBox::Yes|QMessageBox::No|QMessageBox::Help, QMessageBox::No); //标题information,内容xxx,三个选项(yes,no,help), 聚焦No对话框
	if (ret==QMessageBox::Yes)
	{
		qDebug()<<"yes"<<endl;
	}
	else if (ret==QMessageBox::No) {
		qDebug()<<"NO"<<endl;
	}
	else if (ret==QMessageBox::Help) {		//对选中的yes,no,help做出对应的处理
		qDebug()<<"help"<<endl;
	}
	
	//warning
	QMessageBox::warning(this, "warning", "xxxxxxx", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);

16. QColorDialog 设置字的颜色

#include<QColorDialog>
void Widget::on_pushButton_2_clicked()
{
	QColor mycolor = QColorDialog::getColor(Qt::red, this,"get color");
	if(mycolor.isValid())				//获取有效
	{
    QPalette pe =ui->label->palette();
    pe.setColor(QPalette::WindowText, mycolor);
    ui->label->setPalette(pe);
	}
}

17. QProcess 开启新的进程执行命令,调用mplayer 播放视频文件

#include<QProcess>
QProcess *myprocess;
void Widget::init(){
	myprocess = new QProcess(this);
	connect(myprocess,SIGNAL(readyRead()), this, SLOT(doProcessreadyread()));}  //连接信号与槽
void Widget::on_btn_exec_clicked()
{
	QString cmd = ui->lbl_cmd->text();		
	QString argument = ui->lineEdit->text();
	QStringList ArrayArgument =argument.split(" ");	//以空格作为分隔符
	myprocess->start(cmd, ArrayArgument);			//执行进程命令
}
void Widget::doProcessreadyread(){
	while (!myprocess->atEnd()) {
		QString str = QString(myprocess->readLine()).replace("\n","");	//将内容读出来,并且将换行符替换掉
		ui->textEdit->append(str);										//将读出的内容追加显示在textEdit上
	}
}

18. QFileDialog文件的操作

#include<QFileDialog>
    QStringList array =  QFileDialog::getOpenFileNames(this, "需要播放的文件",
                              "/home/pi/Music","video(*.mp3 *.avi *.mp4)");       //打开多个文件 array为一个数组

19. 打开关闭事件,记事本的设计,实现QTimer(用QThread)

20. mplayer播放器

1. 终端播放 mplayer '音乐文件路径.mp4'
2. qt音乐播放器
	4.设置各种函数
	用到的头文件有 QFileDialog 需要打开音乐文件,有QProcess 后台打开mplayer进程
主要功能:
	ui页面设计 包括label用于显示视频,多个按钮功能(选择文件,上一首,播放,下一首,停止,音量调节旋钮) 并设置好图标icon	
	第一,将图片导入到qt工程中
	add new --> Qt -->Qt Resource File -->添加前缀--添加文件(将文件选中添加进去 再保存)
	第二,设置控件上的图标
	icon --> Normal off --> 有三个点,点击,选择图片 --> 设置图标大小 iconsize --> 按钮边框隐藏 最下面的flat勾选
	第三,设置各种槽函数和自定义函数  
	需要用到的头文件#include <QFileDialog>打开文件 	 #include <QProcess>调用进程打开mplayer

具体内容见/home/pi/qtproject/test12_myplayer  这里只列出.h文件中的声明

private slots:
	void on_btn_open_clicked();								//打开视频文件(里面调用playmovie())
	void on_btn_play_clicked();								//播放视频
	void on_btn_before_clicked();							//打开前一首视频
	void on_btn_next_clicked();								//打开后一首视频
	void on_volume_valueChanged(int value);					//音量调节旋钮
	void on_horizontalSlider_fast_valueChanged(int value);	//视频进度条拖动条
	private:
	void playmovie(const QString filename);					//播放文件视频
private:
	Ui::Widget *ui;
	QStringList playlist;									//字符串列表
	void init();
	int playindex;											//播放视频文件的索引
	void playmovie(const QString filename);					//播放视频的函数
	QProcess *playprocess;									//新的进程执行mplayer
	int isplaying;  										//为0从未播放   1正在播放    2暂停状态  3结束状态
};

21. QDate和QTime获取当地日期和时间

#include <QDate>
#include <QTime>
  1.QDate获取当地日期   年月日
	QDate D1;
	D1 = QDate::currentDate();			
	QDate D2(1995,1,26);	// 直接赋值D2
	qDebug() << "D1:" << D1;//获取当前日期  
	qDebug() << "D2:" << D2;
	qDebug() << "year:" << D1.year();//获取年
	qDebug() << "month:" << D1.month();//获取月
	qDebug() << "day:" << D1.day()

	D1: QDate("2020-6-21")		//输出的是2020-6-21 数据类型是QData
	D2: QDate("1995-01-26")		
	year: 2020
	month: 6
	day: 21
	isValid: true
	dayOfWeek: 3
	dayOfYear: 325
	daysInMonth: 30
	daysInYear: 365

  2.QTime获取当地时间  时分秒
    QTime T1;
	T1=QTime::currentTime();
	QTime T2(12,9,26);        //输出QTime("12:09:26.000")
	qDebug() << "T2:" << T2;
	qDebug() << "T1:" << T1;   //获取当前日期
	qDebug() << "hour:" << T1.hour();//获取时
	qDebug() << "minute:" << T1.minute();//获取分
	qDebug() << "second:" << T1.second();//获取秒
	qDebug() << "mesc:" << T1.mesc();//获取毫秒
	
	T2: QTime("12:09:26.000")	//输出的是12:09:26.000 数据类型是QTime
	T1: QTime("11:57:10.193")
	hour: 11
	minute: 57
	second: 10
	msec: 193

22. 点餐系统的完成 详情见树莓派/home/pi/qtproject/qt_homework

 类似资料: