QT开发(1)

目录

一、QT 、 GUI开发

1、图形显示原理

2、linux上如何编程显示器

3、QT是什么

4、QT环境的安装

5、qt快捷键

6、QT程序开发流程

二、常见控件

1、按钮类

2、布局类

3、输出类

4、输入类

5、容器类

6、其他类

三、Qstring常用字符处理

1、qstring构造函数结构

2、添加(开头、结尾)

3、数字转字符串

4、字符串转数字

5、取单个字符

6、删除字符

7、是否包含字符

8、出现次数

9、指定下标获取

10、判断开头与结尾

11、字符串填充

12、插入

13、判空、判断大小写

14、大小写转换

15、截取

16、根据指定项截取

17、指定项切割

18、替换

19、交换

20、转换为string

21、去掉开头、结尾空格

四、String常见处理

1、构造函数


一、QT 、 GUI开发

c++/QT(开源)       (java/android)/GUI/图形用户接口
​

1、图形显示原理

像素点、分辨率、RGB、透明度、显存

2、linux上如何编程显示器

linux帧缓存(frambuffer)编程
映射显示存储空间:mmap()
显示器文件: /dev/fb0* 

3、QT是什么

一堆可用于图形界面开发的c++类库

4、QT环境的安装

1、库
2、编译环境
​

5、qt快捷键

1、ctrl + o : 打开文件或项目
2、ctrl + n :创建文件或项目
3、ctrl + a :全选
4、ctrl + i :自动对齐(先全选)
5、ctrl + s :保存
6、ctrl + sift +s :保存所有文件
7、ctrl + w :关闭窗口
8、CTRL + l : 跳转行
9、ctrl + z :  撤销
10、shfit + f2 : 切换函数声明与定义
11、ctrl + f:查找
​
​

6、QT程序开发流程

1、申请必要部件
2、将部件构造出来
3、必要的布局
4、前后台关联
5、美化

二、常见控件

1、按钮类

1、qpushbutton 普通按钮
2、qtoolbutton 工具按钮(一般用于图形显示)
3、qradiobutton 单选按钮(多个按钮时,只有一个被选择)
4、qcheckbox   复选框(多个按钮,可以同时选)
5、qcommandlinkbutoon 命令连接按钮g
​
setGeometry(100, 100, 100, 50);

2、布局类

#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //构造需要的控件
    bt = new QPushButton("1");
    bt1 = new QPushButton("2");
    le = new QLineEdit;
    le->setAlignment(Qt::AlignRight);
#if 0
    //垂直布局
    QVBoxLayout *vbox = new QVBoxLayout; //构造一个布局管理器
    vbox->addWidget(le);                 //将需要布局的控件加入布局管理器
    vbox->addWidget(bt);
    this->setLayout(vbox);               //将布局管理器贴在当前界面
#endif

#if 0
    //水平布局
    QHBoxLayout *vbox = new QHBoxLayout; //构造一个布局管理器
    vbox->addWidget(le);                 //将需要布局的控件加入布局管理器
    vbox->addWidget(bt);
    this->setLayout(vbox);               //将布局管理器贴在当前界面
#endif

#if 0
    //网格布局
    QGridLayout *vbox = new QGridLayout; //构造一个布局管理器
    vbox->addWidget(le, 0, 0, 1, 2);     //将需要布局的控件加入布局管理器
    vbox->addWidget(bt, 1, 1);
    this->setLayout(vbox);               //将布局管理器贴在当前界面
#endif

    //混合布局
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(bt);
    hbox->addWidget(bt1);
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addLayout(hbox);
    this->setLayout(vbox);

}
Widget::~Widget()
{}

3、输出类

1、 qlabel:标签,(文本、图片、动画)
qlabel* le = new qlabl;
le->setpixmap(qpixmap("falename"));

2、 qtextbrowser(文本浏览器),支持html文件

3、QCalendarWidget 日历窗口

4、QLCDNumber 七段数码管
5、QProgressBar 进度条
6、qtexttospech
   
在工程文件里加上代码: QT += texttospeech
QTextToSpeech *m_speech=new QTextToSpeech;
//异步朗读文字
m_speech->say("Hello!,老吕,发工资啦");
    
QTextToSpeech *speech = new QTextToSpeech();
speech->say(msg);//播报msg
speech->stop();//停止当前的播报
speech->pause();//暂停当前的播报
speech->resume();//重新播报当前内容

enum State {
        Ready,//空闲
        Speaking,//播报中
        Paused,//暂停
        BackendError//错误
    };





#include "widget.h"
#include <QVBoxLayout>
#include <QMovie>
#include <QTimer>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    /*标签*/
    lb_text = new QLabel("标签测试");
    lb_text->setAlignment(Qt::AlignCenter);

    lb_pix = new QLabel("我是图片");
    lb_pix->setMinimumSize(10, 10);
    lb_pix->setScaledContents(true); //自动缩放显示
    lb_pix->setPixmap(QPixmap("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.bmp"));

    lb_gif = new QLabel("我是动画");
    QMovie *m = new QMovie("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.gif");
    lb_gif->setMovie(m);
    m->start();

    /*文本浏览器(html)*/
    tbrowser = new QTextBrowser;
    tbrowser->setText("<!DOCTYPE html>\
                      <html>\
                      <head>\
                      <meta charset=\"utf-8\">\
                      <title>runoob.com</title>\
                      </head>\
                      <body>\
                          <h1  >AAAAAAAA</h1>\
                          <p style=\"background-color:rgb(255,0,0)\">BBBBBBBBB</p>\
                      </body>\
                      </html>");

    /*日历窗口*/
    caw = new QCalendarWidget;

    /*七段数码管*/
    lcd = new QLCDNumber;
    lcd->setMinimumHeight(50);
    lcd->display(250); //显示数字

    /*进度条*/
    pbr = new QProgressBar;
    pbr->setValue(60);
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(pbr);
    vbox->addWidget(lcd);
    vbox->addWidget(caw);
    vbox->addWidget(tbrowser);
    vbox->addWidget(lb_text);
    vbox->addWidget(lb_pix);
    vbox->addWidget(lb_gif);
    setLayout(vbox);

    connect(caw, SIGNAL(clicked(QDate)), this, SLOT(showDate(QDate)));


    QTimer *t = new QTimer;
    connect(t, SIGNAL(timeout()), this, SLOT(update_value()));
    t->start(100);
}

void Widget::update_value(void)
{
    static int data = 0;
    lcd->display(data);
    pbr->setValue(data);
    data++;
    if(data == 100)
        data = 0;
}

void Widget::showDate(QDate d)
{
    lb_text->setText(d.toString());
}

Widget::~Widget()
{

}




//鼠标拖动
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text().toUpper());
}

4、输入类

1、QComboBox : 组合框 (下拉框)	
				addItem(” wdwe“) 添加选项        
                        
2、qfontcombox:字体下拉框
                        
3、qlineedit: 行编辑框
                setPlaceholderText(”用户名“) 添加底行注释
                        
4、qtextedit: 文本编辑框
                        
5、qspinbox :自选框
                setMaximum(20); 最大能到20
                setSingleStep(10);设置单步跨度10
                        
6、qtimeedit :时间编辑框
                        
7、qdial:旋钮
                setRange(0, 1000);setRange(0, 1000);设置调节范围
                        
8、qscrollbar:滚动条
                setRange(0, 1000);setRange(0, 1000);  设置调节范围
                setOrientation(Qt::Horizontal); 显示方案“水平”      
                        
9、qslider    :滑动条
                setRange(0, 1000);setRange(0, 1000);设置调节范围
                setOrientation(Qt::Horizontal);显示方案“水平”

5、容器类

1、QGroupBox:分组框(带边框和注释的容器)
	

2、QWidget  :空白框//无边框显示的容器
    
3、QScrollArea:滚动区域(带滚动条,可以实现小区域展示大的内容范围)
			setWidget()

4、QToolBox:工具箱容器(可折叠)
			addItem(t1, "aaaaa"); //将文本编辑框装入工具箱

5、QTabWidget:制表容器
    		setTabsClosable(true);//显示关闭的按钮
			addTab(t1, "aaaa"); //插入一个新标签
    
6、QStackedWidget:栈式容器(多个页面重叠再一起)
			addWidget(t1)
    

6、其他类

#include <Qstringlist> 
qstringlist pixnames 等价于 vector<string> pixnames存储字符串的列表
    
  

三、Qstring常用字符处理

1、qstring构造函数结构

1、Qstring(Qchar ch);//构建单个字符(ch)的字符串的Qstring对象
2、Qstring(int size ,Qchar ch )//构建size个字符(ch)的字符串的Qstring对象
3、Qstring(const Qstring &other)//从已存在的Qstring拷贝构造
4、Qstring(Qstring &&other)//指向以存在的Qstring(两个Qstring指向同一个空间)
5、Qstring(const char * str)//从str字符串创建Qstring
    QString repeated(int times) const
 
QString str("ab");
str.repeated(4);            // returns "abababab"
      

2、添加(开头、结尾)

Qstring str;
1、	str.append(const Qstring str2);//str2加到str后
2、  str.append(const Qstring str2,int len);//str2(len个字符)加到str后
3、  str.append(qchar ch);//字符ch加到str后

prepend()//从开头加字符、字符串(用法同上)

STL兼容追加函数:
void push_back(const QString &other)
void push_front(const QString &other)
    
    

3、数字转字符串

Qstring str;
str.setnum(1234);

4、字符串转数字

Qstring str = "1234";
str.toint(str);
str.tolong();
str.todouble();

5、取单个字符

const QChar at(int position) //等效于string[position]
QChar back() //取最后一个字符,等效于at(size() - 1)
QChar front() //取第一个字符,等效于at(0)

6、删除字符

//从末尾删除n个字符
void QString::chop(int n) 
 
//返回包含此字符串的size() - len最左字符的子字符串。原字符串不会被修改
QString QString::chopped(int len) const
 
//清除字符串内容,并使其为空
void QString::clear()
 
//从指定位置开始删除n个字符
QString &remove(int position, int n)
 
//删除此字符串中出现的所有ch字符,cs参数指定了是否对大小写敏感
QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)
 
//删除此字符串中出现的所有str
QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
 
//删除所有满足指定正则表达式的子项
QString &remove(const QRegExp &rx)
QString &remove(const QRegularExpression &re)
 
 
 

7、是否包含字符

//是否包含某个QString
bool contains(const QString &str, Qt::CaseSensitivity cs = ...) const

 //是否包含某个字符
bool contains(QChar ch, Qt::CaseSensitivity cs = ...) const

//是否包含某个拉丁字符串
bool contains(QLatin1String str, Qt::CaseSensitivity cs = ...) const

//以正则表达式的形式确定是否满足包含条件
bool contains(const QRegExp &rx) const
bool contains(QRegExp &rx) const
bool contains(const QRegularExpression &re) const
bool contains(const QRegularExpression &re, QRegularExpressionMatch *match) const

8、出现次数

//返回QString出现的次数
int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//返回字符ch出现的次数
int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//返回满足正则表达式条件的内容项出现的次数
int count(const QRegExp &rx) const
int count(const QRegularExpression &re) const

9、指定下标获取

 
//参数1:目标内容(可以是QString,QChar,也可以是正则表达式)
//参数2:开始查找的位置
int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int indexOf(QLatin1String str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int indexOf(const QRegExp &rx, int from = 0) const
int indexOf(QRegExp &rx, int from = 0) const
int indexOf(const QRegularExpression &re, int from = 0) const
int indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const
 
 
QString x = "sticky question";
QString y = "sti";
x.indexOf(y);               // returns 0
x.indexOf(y, 1);            // returns 10
x.indexOf(y, 10);           // returns 10
x.indexOf(y, 11);           // returns -1
 
 
//类似于indexOf,只不过是返回最后出现的位置
int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int lastIndexOf(QLatin1String str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
int lastIndexOf(const QRegExp &rx, int from = -1) const
int lastIndexOf(QRegExp &rx, int from = -1) const
int lastIndexOf(const QRegularExpression &re, int from = -1) const
int lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const

10、判断开头与结尾

//判断是否以某个QString结尾
bool endsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
//判断是否以某个字符结尾
bool endsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
 
bool startsWith(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
bool startsWith(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

11、字符串填充

 
QString &fill(QChar ch, int size = -1)
 
 
QString str = "Berlin";
str.fill('z');
// str == "zzzzzz"
 
str.fill('A', 2);
// str == "AA"

12、插入

 
QString &insert(int position, const QString &str)
QString &insert(int position, const QChar *unicode, int size)
QString &insert(int position, QChar ch)
QString &insert(int position, const char *str)
QString &insert(int position, const QByteArray &str)
 
 
 
QString str = "Meal";
str.insert(1, QString("ontr"));
// str == "Montreal"

13、判空、判断大小写

bool isEmpty() const
bool isNull() const
bool isLower() const
bool isUpper() const
 
 
 
isEmpty、isNull区别
 
QString().isEmpty();            // returns true
QString("").isEmpty();          // returns true
QString("x").isEmpty();         // returns false
QString("abc").isEmpty();       // returns false
 
QString().isNull();             // returns true
QString("").isNull();           // returns false
QString("abc").isNull();        // returns false
 
//大多数情况下,用isEmpty较为稳妥

14、大小写转换

QString toLower() const
QString toUpper() const
 
QString str = "The Qt PROJECT";
str = str.toLower();        // str == "the qt project"

15、截取

//返回包含字符串最左n个字符的子字符串。
QString left(int n) const
//返回包含字符串最左n个字符的子字符串,如果个数不够的话用fill填充空缺部分。
QString leftJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const
//返回对字符串最左n个字符的子字符串引用。
QStringRef leftRef(int n) const
 
//返回包含此字符串的size() - len最左字符的子字符串。
QString QString::chopped(int len) const
 
//在指定位置截断字符串,会直接修改原字符串
void QString::truncate(int position)
 
 
QString x = "Pineapple";
QString y = x.left(4);      // y == "Pine"
 
QString s = "apple";
QString t = s.leftJustified(8, '.');    // t == "apple..."
 
QString x = "Pineapple";
QStringRef y = x.leftRef(4);        // y == "Pine"
 
 
 
//返回从下标position开始取的n个字符串,如果n=-1,则从下标position开始取到字符串末尾
QString mid(int position, int n = -1) const
QStringRef midRef(int position, int n = -1) const
 
QString x = "Nine pineapples";
QString y = x.mid(5, 4);            // y == "pine"
QString z = x.mid(5);               // z == "pineapples"
 
QString x = "Nine pineapples";
QStringRef y = x.midRef(5, 4);      // y == "pine"
QStringRef z = x.midRef(5);         // z == "pineapples"
 
 
//用法类似于left
QString right(int n) const
//用法类似于leftJustified
QString rightJustified(int width, QChar fill = QLatin1Char(' '), bool truncate = false) const
//用法类似于leftRef
QStringRef rightRef(int n) const
 

16、根据指定项截取

//该函数首先会根据sep,将QString进行分割,然后从start开始取,取到end结束
//如果end或start为负值,则代表从右往左取
QString section(QChar sep, int start, int end = ..., QString::SectionFlags flags = SectionDefault) const
 
 
QString str;
QString csv = "forename,middlename,surname,phone";
QString path = "/usr/local/bin/myapp"; // First field is empty
QString::SectionFlag flag = QString::SectionSkipEmpty;
 
//[0]:"forenam"
//[1]:"middlename"
//[2]:"surname"
//[3]:"phon"
//取出开始下标为2,结束下标为2的子字符串:
//str == "surname"
str = csv.section(',', 2, 2);
 
//[0]:""
//[1]:"usr"
//[2]:"local"
//[3]:"bin"
//[4]:"myapp"
//取出下标为3,结束下标为4的子字符串:
//str == "bin/myapp"
str = path.section('/', 3, 4);  
 
//flag指明为忽略空字符串:
//[0]:"usr"
//[1]:"local"
//[2]:"bin"
//[3]:"myapp"
str = path.section('/', 3, 3, flag); // str == "myapp"
 
//以QString分割,其他同上
QString section(const QString &sep, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const
 
//以正则表达式分割,其他同上
QString section(const QRegExp &reg, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const
QString section(const QRegularExpression &re, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const

17、指定项切割

QStringList split(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList split(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QStringList split(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
QStringList split(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const
 
 
QString str = "a,,b,c";
 
QStringList list1 = str.split(',');
// list1: [ "a", "", "b", "c" ]
 
QStringList list2 = str.split(',', QString::SkipEmptyParts);
// list2: [ "a", "b", "c" ]
 
QString str = "abc";
auto parts = str.split("");
// parts: {"", "a", "b", "c", ""}
 
QString str = "/a/b/c/";
auto parts = str.split('/');
// parts: {"", "a", "b", "c", ""}
 
 
//用法和上面类似,返回的是QString引用
QVector<QStringRef> splitRef(const QString &sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QVector<QStringRef> splitRef(QChar sep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QVector<QStringRef> splitRef(const QRegExp &rx, QString::SplitBehavior behavior = KeepEmptyParts) const
QVector<QStringRef> splitRef(const QRegularExpression &re, QString::SplitBehavior behavior = KeepEmptyParts) const

18、替换

//从指定下标开始替换
QString &replace(int position, int n, const QString &after)
QString &replace(int position, int n, const QChar *unicode, int size)
QString &replace(int position, int n, QChar after)
//单个字符替换(替换所有)
QString &replace(QChar before, QChar after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中的所有befor替换为after
QString &replace(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中的所有ch替换为after
QString &replace(QChar ch, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive)
//将字符串中所有符合正则表达式检索条件的字符串项替换为after
QString &replace(const QRegExp &rx, const QString &after)
QString &replace(const QRegularExpression &re, const QString &after)

19、交换

//用这个字符串交换字符串other。这个操作非常快,从来没有失败过。
void swap(QString &other)

20、转换为string

 
//std String
std::string toStdString() const

21、去掉开头、结尾空格

QString trimmed() const
 
 
QString str = "  lots\t of\nwhitespace\r\n ";
str = str.trimmed();
// str == "lots\t of\nwhitespace"

四、String常见处理

1、构造函数

//将string初始化为s指向的字符串对象
string (const char* s);

//构造一个n个ch字符的字符串的string对象
    string(n,char ch);
    
    //构造一个string对象,与str一样
    string(string str);
//将string初始化为s指向字符串前n个字符
string(const char* s,n);

//将string初始化为begin、end之间的字符串,其中begin、end的行为就像指针,用于指定位置,范围包括begin,不包括end
template<class inet>
    string(inet begin, inet end)

 //将一个string初始化为,str中从m到结尾的n个字符的对象
    string(str,m,n)
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值