1、QString
new 的返回值是一个地址,所以
QString str = new QString();是错误的
->
QString str = QString();
or->
QString * str = new QString();
1.1 QString 的arg用法
QString temp = QString("%1 %2 %3").arg(i).arg(j).arg(k);参数替换
2、QFileDialog
成员函数1)取目录
QString QFileDialog::getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly ) [static]
成员函数2)取文件,返回值包含路径,即*//filename
QStringList QFileDialog::getOpenFileNames(QWidgetparent=0,const QString &caption= QString(),const QString&dir=QString(), const QString & filter=QString(),QString* selectedFIlter=0,Options option=0)[static];
3 QDir
- 取得当前目录:
QString currentPath();
2)取得当前目录下所有文件或目录名,注意这里返回的都是“文件或目录名”而非绝对路径+文件/目录名。
QStringList QDir::entryList ( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const
QStringList QDir::entryList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const
这里的Filters可以取:
QDir::Dirs ; QDir::AllDirs ;QDir::files ;QDir::Drives ; QDir::NoSymLinks;QDir::NoDot;QDir::NoDotDot;QDir::Readable;
QDir::AllEntries;QDir::Writable;QDir::Executable;QDir::Modified; QDir::Hiden;QDIr::System;QDir::CaseSensitive
这里的SortFlags可以为:
QDir::Name ; QDir::Time ;QDir:Size ;QDir:Type; QDir::Unsorted;QDir::NoSort;QDir::QirsFirst;QDir::Reversed;QDir::IgnoreCase;QDir::LocaleAware;
3)初始化:
QDir::QDir ( const QString & path = QString() )
4 QCheckBox
1)取得值
CheckState();
5 调试 qDebug/qWarning/qFatal;
整数:qDebug("%d",i);
字符串 qDebug<<str;
6 qApp->processEvents()
处理收到的所有事件–当程序正在长时间操作的时候,用它来处理临时事件。
7 QComboBox
1)添加成员
void QComboBox::addItem ( const QString & text, const QVariant & userData = QVariant() )
void QComboBox::addItem ( const QIcon & icon, const QString & text, const QVariant & userData = QVariant() )
void QComboBox::addItems ( const QStringList & texts )
2)删除成员
void QComboBox::removeItem ( int index )
3)取得当前成员
QString currentText () const ;
QVariant QComboBox::itemData ( int index, int role = Qt::UserRole ) const
比如取得一个值:
QString str = combobox->itemData(combobox->currentIndex(),QT::UserRole)
.value ();
8 QDateTime && QDate
1)获取时间
QDateTime QDateTime::currentDateTime () [static]
*QDate QDate::currentDate () [static]
2)转化为字符串
QString QDateTime::toString ( const QString & format ) const
QString QDate::toString ( const QString & format ) const
eg:
Format Result
dd.MM.yyyy 21.05.2001
ddd MMMM d yy Tue May 21 01
hh:mm:ss.zzz 14:13:09.042
hⓂ️s ap 2:13:9 pm
9QTableWidget && QTableWidgetItem
9.1 创建
QTableWidget ( int rows, int columns, QWidget * parent = 0 )
->
QTableWidgetItem ( const QString & text, int type = Type )
9.2.添加
void QTableWidget::insertRow ( int row ) [slot]
void QTableWidget::insertColumn ( int column ) [slot]
赋值:
void QTableWidget::setItem ( int row, int column, QTableWidgetItem * item )
9.3取值:
QTableWidgetItem * QTableWidget::currentItem () const
int QTableWidget::currentColumn () const
int QTableWidget::currentRow () const
int rowCount () const //返回行数
int columnCount () const
9.4删除
void QTableWidget::removeColumn ( int column ) [slot]
void QTableWidget::removeRow ( int row ) [slot]
10QFileInfo
文件信息
文件名fileName() ; 文件的绝对路径 absolutePath(); 大小 size() ; 后缀名:suffix() ; 链接 isSymLink();
QFileInfoList,显示所有文件
1)for()
QFileInfoList fileInfo = dir.entryInfoList(QDir::Files|QDir::NoSymLinks);
for(int i=0;i<fileInfo.size();i++)
{
QFileInfo qf=fileInfo.at(i);
qDebug()<<qf.fileName();
} - foreach
QFileInfo filei;
foreach(filei,fileInfo)
{
qDebug()<<filei.fileName();
}
11QMenu
1)构造
QMenu::QMenu ( const QString & title, QWidget * parent = 0 )
QAction * QMenu::addAction ( const QIcon & icon, const QString & text )
12 QToolBar
QToolBar::QToolBar ( const QString & title, QWidget * parent = 0 )
void QToolBar::addAction ( QAction * action )
QAction * QToolBar::addAction ( const QIcon & icon, const QString & text )
13 QDockWidget
QDockWidget::QDockWidget ( const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0 )
14 QAction
void QAction::toggled ( bool checked ) [signal] // 当一个 可改变状态的 动作,被选中时触发
例如:
connect( action1, SIGNAL( triggled()), this, SLOT( doAction1() ) );
QAction的添加,即通过SIGNAL-SLOT将,动作对象对应到一个SLOT中去。
2) text:QString 动作的描述文本信息
15 QObject
1)QObject * QObject::sender () const [protected] && T qobject_cast ( QObject * object )
返回发出信号的对象 返回给出对象的类型
比如,一个action1 在 triggled之后,想要知道是那个action来的,可以用:
q_object_cast<QAction*> (sender())
再比如,一个pushbutton再被点击之后,找到是那个:
QPushButton pushbtn = qobject_cast<QPushButton> (sender());
if( QPushButton == pushbtn1){…}else if(QPushButton == pushbtn2){…}
16QLayout && QSizePolicy
注意,一个QWidget只能对应一个QLayout,所以:以下是错误的
QWidget widget = new QWidget();
QHBoxLayout * layout_1 = new QHBoxLayout(widget);
QHBoxLayout layout_2 = new QHBoxLayout(widget);
1)
setSizeConstraintSize(SizeConstraint)
SizeConstraint:(大小策略)
QLayout::SetDefaultConstraint/SetFixedSize/SetMinimumSize/SetMaximumSize/SeNoConstraint
2)QSizePolicy, layout的水平和垂直的 大小改变的政策。包括:Policy和stretch
enum QSizePolicy::Policy 大小改变政策都有:
QSizePolicy::Fixed/Minimum/Maximum/Preferred/Expanding/MinimumExpanding/Ignored
设置Policy
setHorizontalPolicy
设置 stretch,比如一个水平的layout,两个之间的长度比为1:2,可以设置
SizePolicy的 horizontalStrentch大小分别为1:2
setHorizontalStretch
3)窗口部件的大小受到 QSizePolicy和SizeConstraint的影响。
17 SIGNAL && SLOT18 画图
arthur绘图系统:
QPainter:画图工具 ; QPaintDevice:画布 ; QPaintEngine:画图引擎;
Graphics View(MVC): M–scene ; V—view
Qt使用双缓冲机制,即一个缓冲区绘制临时内容;另一个缓冲区保存绘制好的内容;
这样,每次绘制新内容,将图像从图像缓冲区COPY到临时缓冲区;绘制过程在临时缓冲区中进行;绘制结束后,结构COPY进图像缓冲区;Qt默认采用此方式;如果想要自己定义绘制方式,可以使用:
setAttribute(Qt::WA_NoBackground);
其中,QPaintDevice的子类有:
QCustomRasterPaintDevice, QGLFramebufferObject, QGLPixelBuffer, QImage,
QPicture, QPixmap, QPrinter, QSvgGenerator, QWidget.
1)QPainter
构造
QPainter::QPainter ( QPaintDevice * device )
填充:
设置画笔和画刷setPen/setBrush
fillRect/fillpath
平移/旋转/缩放/扭曲分别为: translate()/rotate()/scale()/shear()
2)画图工具
QBrush
3)渐变模型:
QGradient Inherited by QConicalGradient, QLinearGradient, and QRadialGradient.
初始化,比如:
QLinearGradient::QLinearGradient ( qreal x1, qreal y1, qreal x2, qreal y2 )//参数表示渐变的范围
4)QPixmap
QPixmap QPixmap::scaled ( int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation ) const
此即,使图像缩放以适应窗口。
其中:Qt::AspectRatioMode有Qt::IgnoreAspectRatio,Qt::KeepAspectRatio,Qt::KeepAspectRatioByExpanding
三种。分别为:适应边界,保持图像边界;可以超出边界;
5)相互转化
QPixmap转化为QImage: QImage QPixmap::toImage () const
QImage转化为QPixmap: QPixmap QPixmap::fromImage ( const QImage & image, Qt::ImageConversionFlags flags = Qt::AutoColor ) [static]
6)获取像素值
QImage img=pixmap.toImage();
QColor color = img.pixel(10, 10);
QString text = QString(“RGB= %1: %2: %3”).arg(color.red()).arg(color.green()).arg(color.blue());
7)灰度图像
int qGray ( int r, int g, int b ),从RGB值到灰度值
The gray value is calculated using the formula (r * 11 + g * 16 + b * 5)/32.
7.1)最简单的转化:
int w=img.width();
int h=img.height();
QImage grayImg(w,h,QImage::Format_RGB32);
for(int i=0;i<w;i++)
for(int j=0;j<h;j++)
{
int gray=qGray(img.pixel(i,j));
grayImg.setPixel(i,j, qRgb(gray,gray,gray));
}
7.2)系统自带的转化方法(qt4)
QVector grayColourTable;//灰度颜色表
for(int i = 0; i < 256; i++)
{
grayColourTable.append(qRgb(i,i,i));
}
//使用convertToFormat转化
QImage grayImg = img.convertToFormat(QImage::Format_Indexed8,grayColourTable);
7.3)另外一种:
QImage ImageProcess::convertToGray(QImage &colourImg)
{
int width = colourImg.width();
int height = colourImg.height();
//目的图像的数据
QImage grayImg = QImage(width,height,QImage::Format_Indexed8);
QVector grayColourTable;
for(int i = 0; i < 256; i++)
{
grayColourTable.append(qRgb(i,i,i));
}
grayImg.setColorTable(grayColourTable);
unsigned char desData = grayImg.bits();
//对目的图像的数据进行赋值
for(int y=0;y<height;++y)
for(int x=0;x<width;++x)
{
desData++=(unsigned char)qGray(colourImg.pixel(x,y));
}
return grayImg;
}
7.4)
19 QWidget
1)包含的事件:
鼠标:mouseMoveEvent(QMouseMoveEventevent) //其他Press/Release
键盘:keyPressEvent(QKeyEventevent)//其他Release
2)update
void QWidget::update ( int x, int y, int w, int h )
void QWidget::update ( const QRect & rect )
void QWidget::update ( const QRegion & rgn )
void QWidget::update () [slot]// 发送一个paint 事件,执行paint
3)设置最小的大小
setMinimumSize(width,height)
4)
20 QFont相关
1)QFontDatabase,字体数据库,提供系统可用的字体的信息
比如:字体类型
QStringList QFontDatabase::families ( WritingSystem writingSystem = Any ) const
再如:字体风格:
QStringList QFontDatabase::styles ( const QString & family ) const //返回字体风格
bool QFontDatabase::italic ( const QString & family, const QString & style ) const//由类型和风格取某一个风格
bool QFontDatabase::bold ( const QString & family, const QString & style ) const//同上
int QFontDatabase::weight ( const QString & family, const QString & style ) const//同上
2)QFont
构造:QFont::QFont ( const QString & family, int pointSize = -1, int weight = -1, bool italic = false )
比如:QFont font= QFont(family,fontSize,database.weight(family,style),database.italic(family,style));
3)QTextCharFormat,编辑框中的字体格式
设置字体setFont(font);
4)QTextCursor,对编辑框(QTextDocuments)的接口;通过它可以插入字符;修改字体格式等
void QTextCursor::insertText ( const QString & text )//在当前位置用当前字体格式插入字符
void QTextCursor::insertText ( const QString & text, const QTextCharFormat & format )
void QTextCursor::insertBlock ()//在当前位置用当前字体格式插入空的一行/块
21 QColor
提供了RGB/HSV/CMYK三种模式
1)构造:
QColor::QColor ( int r, int g, int b, int a = 255 )
QColor::QColor ( QRgb color )
QColor::QColor ( const QString & name ) //name可以是#RGB #RRGGBB #RRRGGGBBB #RRRRGGGGBBBB或者SVG color keyword names
交互构造:QColorDialog::QColorDialog ( const QColor & initial, QWidget * parent = 0 )
22 QPainterPath
1)添加贝塞尔曲线:前四个参数为控制点最后一个为结束点,如下
void QPainterPath::cubicTo ( qreal c1X, qreal c1Y, qreal c2X, qreal c2Y, qreal endPointX, qreal endPointY )
其他的添加路径点有:lineTo/arcTo,quadTo(二次贝塞尔曲线)
2)
23 QtGlobal
type:qint8/16/32/64/qlonglong/qreal/quint8/16/32/64/unchar/uint/ulong/ushort/
functions:qAbs/qDebug/qRand/qsrand/
macros:QT_ASSERT/foreach/
24 QDesktopWidget
说明:屏幕信息类,一个特殊的widget
1)
25 QKeySequence
标准快捷键
QKeySequence::Open/Close/Save/Quite/New/Delete/Quit/cut/copy/paste等等
26 QMainWindow
QMainWindow提供的是一个固定布局的窗口;你只要自己定义centralWidget,MenuBar,ToolBar,DockWidget,StatusBar,即可。
所以,一个继承自QMainWindow的类,必然首先要做的是:setCentralWidget()
添加菜单,比如:
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
添加菜单栏,比如:
QMenuBar menuBar = new QMenuBar(0);
menuBar->addMenu(tr("&File"));
setMenuBar(menuBar);
添加工具栏:
QToolBar fileToolBar = addToolBar(tr(“File”));
fileToolBar->addAction(newAct);
状态栏:
QStatusBar *statusBar = new QStatusBar();
statusBar()->addWidget(new MyReadWriteIndication);
27 QSrollArea
1)显示图像例子
QLabel *imageLabel = new QLabel;
QImage image(“happyguy.png”);
imageLabel->setPixmap(QPixmap::fromImage(image));
scrollArea = new QScrollArea;
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
但是有时候 scrollArea显示不出来图像,可能的原因,解决方式:
scrollArea->widget()->reSize();//重新设置大小,每次加载图片最好重新设置widget的大小
or:
scrollArea->widget()->setMinimumSize()/setMaxmumSize()
28Graphics View
三个类:QGraphicsScene,QGraphicsView,QGraphicsItem
1)QGraphicsItem
创建自定义的graphics item,必须继承自QGraphicsItem,并实现父类的两个虚函数:
boundingRect()和paint(),例如:
class SimpleItem : public QGraphicsItem
{
public:
QRectF boundingRect() const
{
qreal penWidth = 1;
return QRectF(-10 - penWidth / 2, -10 - penWidth / 2,
20 + penWidth, 20 + penWidth);
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
painter->drawRoundedRect(-10, -10, 20, 20, 5, 5);
}
};
注意,这里的 boundingRect前两个参数指的是相对于item的中心位置的坐标。后两个参数是举行的大小。
注意,GraphicsItemFlag,默认情况下,QGraphicsItem对大多数鼠标和键盘事件是不相应的。如果,想要开启这些相应,应使用:
setFlag(QGraphicsItem::)来开启,如使图元可以移动的相应:
setFlag(QGraphicsItem::ItemIsMoveable);
1)QGraphicsScene:
用来管理graphical item。是QGraphicsItem的容器。未完待续
29 QDrag && QMimeData
1)提供基于MIME的数据托放和数据转换。
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);
2) QMimeData:
MIME类型,格式:
测试 hasText() ; 获取 text() ;设置 setText() ; 类型:text/plain
hasHtml() html() setHtml() text/html
hasUrls() urls() setUrls() text/uri-list
hasImage() imageData() setImageData() image/ *
hasColor() colorData() setColorData() application/x-color
例如,
if(event->mimeData()->hasUrls() ){
QRegExp rx("\.(jpg|bmp|png|gif)$",Qt::CaseInsensitive);
foreach( QUrl url,event->mimeData()->urls() )
{
QString file = url.toLocalFile();
if(rx.indexIn(file)>=0)…;
}
}
数据存储:
2.1.1)void QMimeData::setData ( const QString & mimeType, const QByteArray & data )
普通数据作为QByteArray,直接存储为QMimeData,例如:
QByteArray csvData = …;
QMimeData mimeData = new QMimeData;
mimeData->setData(“text/csv”, csvData);
2.1.2)继承QMimeData,并重写 hasFormat(),formats(),和 retrieveData()
2.1.3)使用 qobject_cast<const MyMineData>(event->mimeData());强制转化。如:
void MyWidget::dropEvent(QDropEvent *event)
{
const MyMimeData *myData =
qobject_cast<const MyMimeData *>(event->mimeData());
if (myData) {
// access myData’s data directly (not through QMimeData’s API)
}
}
30QLabel
1)显示图像
QLabel *lb = new QLabel(0);
lb->resize(300,400);
lb->move(50,30);
lb->setPixmap(QPixmap::fromImage(grayImg));
lb->show();
2)
事件,比如进入QLineEdit时,清空QLineEdit //待续