简介:qtcreator是跨平台的qt IDE,集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 gdb 调试以及qmake 构建工具等,具有图形可视化功能,支持的系统包括Linux,Mac,Windows。它的编程环境采用c++语言,界面采用信号与槽机制,操作简单,直接拖拽即可,能够实现很多功能,以下是我在研一下嵌入式课程学习中对qtcreator使用方法的总结。
标准输入输出功能: QDebug
QString name = ui->lineEdit(部件名称)->text(); //接收字符串,创建一个name变量来接收lineEdit中的字符串
ui->lineEdit->setText(QString::number(c)); //输出字符串,将int整型c转化为字符串c输出到lineEdit的输入框中
qDebug()<<"登录成功"<<endl;
ui->label->setText("xxx"); //输出字符串
QString name = ui->label->text(); //接收字符串 放到name中
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交替进行,后面在播放器可以用到,按一下播放,再按一下暂停
this->close();
5.1 生成解决方案 qmake -project
5.2 生成Makefile文件 qmake
5.3 生成最终可执行程序 make
产生者(按钮等) 绑定(connect) 接受者
QObject::connect(ui->btn_data,SIGNAL(clicked(bool)),this,SLOT(doProcessClick(bool)));
产生者 信号 接受者 槽函数(先声明)
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));
}
}
}
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);
#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;
}
转到槽,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上的文本内容
}
}
#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数码管显示
}
}
//动画显示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)");
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();
}
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);
}
}
#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);
#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);
}
}
#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上
}
}
#include<QFileDialog>
QStringList array = QFileDialog::getOpenFileNames(this, "需要播放的文件",
"/home/pi/Music","video(*.mp3 *.avi *.mp4)"); //打开多个文件 array为一个数组
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结束状态
};
#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