目录
一、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 ®, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const
QString section(const QRegularExpression &re, int start, int end = -1, QString::SectionFlags flags = SectionDefault) const17、指定项切割
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) const18、替换
//从指定下标开始替换 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)
版权声明:本文为x844049168原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。