QT各类学习1

QLineEdit限制输入

有三种方法:

  1. 用QList写入限制符,将输入的内容遍历排除
	QRegExp tempREg;
	tempREg.setPattern("^(\\d)+(.)*");
	unusedRegList.append(tempREg);
	tempREg.setPattern("^(\\s)+(.)*");
	unusedRegList.append(tempREg);
	tempREg.setPattern("(.)*(\")+(.)*");
	unusedRegList.append(tempREg);

	unusedSymbolList << tr(",") << tr(".") << tr("~") << tr("!") << tr("@") << tr("#") << tr("$") << tr("%") << tr("`") << tr("^") << tr(" ")
		<< tr("&") << tr("*") << tr("(") << tr(")") << tr("{") << tr("}") << tr("[")
		<< tr("]") << tr("<") << tr(">") << tr("\\") << tr("|") << tr("+") << tr("=") << tr(":") << tr(";") << tr("/") << tr("?");

	unusedNameList << "auto" << "double" << "int" << "struct" << "break" << "else" << "long"
		<< "switch" << "case" << "enum" << "register" << "typedef" << "char" << "extern" << "return"
		<< "union" << "const" << "float" << "short" << "unsigned" << "continue" << "for"
		<< "signed" << "void" << "default" << "goto" << "sizeof" << "volatile" << "do" << "if" << "while" << "static";
  1. 用正则表达式
QRegExp rx("[\\u4e00-\\u9fa5]*|\\w*|\\d*|_*");
QRegExpValidator *ipRegExpValidator = new QRegExpValidator(rx, this);
ui->lineEdit->setValidator(ipRegExpValidator);

正则表达式包括表达式、量词、断言。"[^AEIOU]"匹配非元音字母;E+匹配1次或多次,E*匹配0次或多次;(?!E)表达式不跟随E才匹配。
3. 设置输入法禁用

ui->lineEdit->setAttribute(Qt::WA_InputMethodEnabled, false);

QT—Tips

  1. QML不能嵌入非QML窗口,渲染机制不同。
  2. QVarient存放其他各种类型数据。
  3. QString的隐式共享将深拷贝和浅拷贝有机结合;含有内存分配策略。
  4. Qt::WindowsFlags 枚举类型。
  5. QT5基本对话框:文件选择、颜色选择、字体选择、标准输入(字符串、下拉表条目、int类型、double类型输入)、标准消息(Question、Information、Warning、Critical、About)。
  6. QPalette对话框或控件的调色板管理控件或窗体的颜色信息。
QStringList colorList = QColor::colorNames();
QColor color = QColor(colorList[i]);
QPalette p = widget->palette();
p.setColor(QPalette::Button,color);
widget->setPalette(p);
widget->update();
  1. 不规则窗体利用setMask(QBitmap(pix.mask()))为窗体设置遮罩,遮住所选区域以外的部分使其看起来是透明的。
  2. 程序启动画面——QSplashScreen
#include <QSplashScreen>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPixmap pixmap("a.png");
    QSplashScreen splash(pixmap);
    splash.show();
    a.processEvents();
    
    ToolPage w;
    w.show();

    splash.finish(&w);
    return a.exec();
}
  1. 文本打印——QPrinter\QPrinterDialog
  2. QMartix类提供世界坐标系统的二维转换,使窗体转换变形。 setScaledContents设置控件的scaledContents属性。
    QImage img;
    QMatrix martix;
    martix.scale(0.5,0.5);			//缩放功能
    martix.rotate(270);				//旋转功能
    img.mirrored(false,true);		//纵向镜像
    img.mirrored(true,false);		//横向镜像
    img.transformed(martix);
  1. 文本编辑用QTextEdit作为输入文本的容器,里面输入的可编辑文本有QTextDocument作为载体,用来表示QTextDocument的元素的QTextBlock、QTextList、QTextFrame是它不同表现形式,每种元素有不同的表现格式,例如QTextBlock对应QTextBlockFormat。QTextCursor是编辑文本的光标,提供了QTextDocument的修改接口。QTextListFormat通过QTextCursor实现QTextDocument的文本排序。
  2. Qt 5双缓冲机制,先将绘制内容绘制在一个图片中,再将图片一次性绘制到控件上。
  3. 点击事件记录起始位置,鼠标移动事件绘制线段。
  4. 分析窗体层次区域及其之间关系,再设计各窗体内部结构。
  5. 以QPixmap对象为QPaintDevice参数绘制,在构造一个QPainter对象时立即开始对绘画设备进行绘制。此构造对象是短时期的,如在paintEvent()只调用一次,所以写了painter->start(),painter->end()。
  6. SVG是可缩放的矢量图形,QT提供了QtSvg模块显示此格式图片,主要有QSvgWidget,QSvgRender,QGraphicsSvgItem。继承QSvgWidget类重写鼠标滚轮事件,QSvgRender::defaultSize()获取图片大小;继承QScrollArea显示SVG。
  7. QT解析XML:DOM和SAX。DOM将xml表示为一棵树,以便随机访问其中的节点但内存消耗相对多一些。SAX是一种事件驱动的XML API。SVG是用XML表示的矢量图形文件。
  8. QCheckBox居中方式:
    ①加样式表:QCheckBox::indicator{ subcontrol-position:center center;}
    ②放在QWidget加弹簧:
    QWidget *widget = new QWidget;
    QHBoxLayout *layout = new QHBoxLayout;
    layout->setSpacing(0);
    layout->setMargin(0);
    layout->addStretch();
    layout->addWidget(box);
    layout->addStretch();
    widget->setLayout(layout);
    ui->tableWidget->setCellWidget(i, 0, widget);

Graphics View框架结构

  1. Graphics View框架结构:QGraphicsScene场景类提供了用于管理位于其中的众多QGraphicsItem图元容器类,QGraphicsView视图类用于显示场景中的图元,一个场景可以通过多个视图表现并包含多个几何图形。
  2. QGraphicsScene::focusItem(),QGraphicsScene::selectedItems()。
  3. QGraphicsView是可滚动的窗口部件,如果要用OpenGL,可以用QGraphicsView::setViewport()将视图设置为QGLWidget,接收键盘和鼠标的输入事件,将他们翻译为场景事件(将坐标转换为场景坐标):QGraphicsView::mapToScene()。
  4. QGraphicsItem处理自己的鼠标键盘事件,有自己的坐标系统,也提供场景和图元,通过QGraphicsItem::martix()来进行自身的交换,包括子图元。
  5. 所有鼠标事件最开始都使用视图坐标,视图坐标是窗口部件的坐标。创建图元后只需注意图元坐标就好,QGraphicsScene和QGraphicsView会完成所有的变换,调用QGraphicsItem::paint()会以图元坐标系为基准。QGraphicsItem::mapToParent()则将某点坐标映射到上一级坐标系中,也可能是场景坐标,也可能是另一个QGraphicsItem坐标。

对QTreeWidget的项搜索功能

做的时间复杂度有点高,有更好的欢迎在评论区讨论 (。・ω・。)

	QList<QTreeWidgetItem *> items = m_ui->treeWidget->findItems(name, Qt::MatchExactly | Qt::MatchRecursive);
	int count = items.count();
	if (items.count() > 0)
	{
		m_ui->treeWidget->setCurrentItem(items.at(0));
	}
		
	int iNum, jNum, kNum,lNum;
	QTreeWidgetItem *item0,*item1, *item2, *item3,*item4;
	//根节点下所有子节点的个数
	item0 = m_ui->treeWidget->topLevelItem(0);
	iNum = item0->childCount();
	
	//遍历根节点下的所有子节点
	if (!m_item.isEmpty()){
		for (int i = 0; i < iNum; i++)
		{
			//根节点下当前遍历到的子节点
			item1 = item0->child(i);

			//判断该节点是否是要找的节点
			if (item1->text(0) == m_item[0])
			{
				jNum = item1->childCount();
				if (jNum == 0)
				{
					m_ui->treeWidget->setCurrentItem(item1);
					break;
				}
				for (int j = 0; j < jNum; j++)
				{
					item2 = item1->child(j);
					if (item2->text(0) == m_item[1])
					{
						kNum = item2->childCount();

						for (int k = 0; k < kNum; k++)
						{
							item3 = item1->child(j)->child(k);
							if (item3->text(0) == m_item[2])
							{
								lNum = item3->childCount();

								for (int l = 0; l < lNum; l++)
								{
									item4 = item1->child(j)->child(k)->child(l);
									if (item4->text(0) == m_item[3])
									{
										m_ui->treeWidget->setCurrentItem(item4);
									}
								}
							}
						}
					}
				}
			}
		}
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值