diff --git a/src/app_link_qqt_library.pri b/src/app_link_qqt_library.pri index 6217146f..890a1742 100644 --- a/src/app_link_qqt_library.pri +++ b/src/app_link_qqt_library.pri @@ -99,7 +99,15 @@ contains (CONFIG, QQT_SOURCE_BUILDIN) { #link_from_sdk do move qqt to sdk path at app pre link command not lib build time #mod qqt source to start post link is not needed here. #need mod app souce after every pri mod. - system("touch $${QQT_SOURCE_ROOT}/frame/qqtapplication.cpp") + #起初,qmake步骤被安置在QQt里,所以只有更改源代码才能启动POSTLINK.现在放置在App里了,这里的touch修改源代码不需要了. + #App修改源代码,Creator会自动qmake,启动qmake步骤PRILINK+POSTLINK + #App修改pro,必须手动qmake,Creator才会qmake,启动qmake步骤PRILINK+POSTLINK + #App必须注意,此处不再持续编译QQt. + #QQt持续编译配置开关 + CONFIG += continued_build + contains(CONFIG, continued_build){ + system("touch $${QQT_SOURCE_ROOT}/frame/qqtapplication.cpp") + } include ($${QQT_SOURCE_ROOT}/qqt_install.pri) #in this pri use QQT_SDK_ROOT QQT_SDK_PWD QQT_LIB_PWD diff --git a/src/exquisite/qqtcustomprogressbar.cpp b/src/exquisite/qqtcustomprogressbar.cpp index d2448867..60412ed2 100644 --- a/src/exquisite/qqtcustomprogressbar.cpp +++ b/src/exquisite/qqtcustomprogressbar.cpp @@ -18,6 +18,7 @@ QQtCustomProgressBar::QQtCustomProgressBar ( QWidget* parent ) : QWidget ( paren nullPosition = 0; lineWidth = 10; cornerRadius = 10; + lineCapStyle = Qt::RoundCap; showPercent = true; showFree = false; @@ -162,7 +163,7 @@ void QQtCustomProgressBar::drawArc ( QPainter* painter, int radius ) pen.setWidthF ( lineWidth ); /*这里可以更改画笔样式更换线条风格*/ - pen.setCapStyle ( Qt::RoundCap ); + pen.setCapStyle ( ( Qt::PenCapStyle ) lineCapStyle ); double arcLength = 360.0 / ( maxValue - minValue ) * ( value - minValue ); QRect rect ( -radius, -radius, radius * 2, radius * 2 ); @@ -591,6 +592,15 @@ void QQtCustomProgressBar::setLineWidth ( int lineWidth ) } } +void QQtCustomProgressBar::setLineCapStyle ( int lineCapStyle ) +{ + if ( this->lineCapStyle != lineCapStyle ) + { + this->lineCapStyle = lineCapStyle; + update(); + } +} + void QQtCustomProgressBar::setShowPercent ( bool showPercent ) { if ( this->showPercent != showPercent ) diff --git a/src/exquisite/qqtcustomprogressbar.h b/src/exquisite/qqtcustomprogressbar.h index 5c6372e3..55a7fdac 100644 --- a/src/exquisite/qqtcustomprogressbar.h +++ b/src/exquisite/qqtcustomprogressbar.h @@ -55,6 +55,7 @@ class QQTSHARED_EXPORT QQtCustomProgressBar : public QWidget Q_PROPERTY ( int nullPosition READ getNullPosition WRITE setNullPosition ) Q_PROPERTY ( int lineWidth READ getLineWidth WRITE setLineWidth ) Q_PROPERTY ( int cornerRadius READ getCornerRaduis WRITE setCornerRadius ) + Q_PROPERTY ( int lineCapStyle READ getLineCapStyle WRITE setLineCapStyle ) Q_PROPERTY ( bool showPercent READ getShowPercent WRITE setShowPercent ) Q_PROPERTY ( bool showFree READ getShowFree WRITE setShowFree ) @@ -112,11 +113,11 @@ public: enum TextStyle { - TextStyle_None = 0, /*不显示*/ + TextStyle_None = 0, /*不显示*/ TextStyle_Middle_Percent = 1, /*只在中央显示百分比*/ - TextStyle_Percent = 2, /*只显示百分比*/ - TextStyle_Text = 3, /*只显示文字*/ - TextStyle_Percent_Text = 4, /*显示百分比和文字*/ + TextStyle_Percent = 2, /*只在下部显示百分比*/ + TextStyle_Text = 3, /*不在下部显示百分比,只在中央显示文字*/ + TextStyle_Percent_Text = 4, /*和在下部显示百分比,和在中央显示文字*/ }; explicit QQtCustomProgressBar ( QWidget* parent = 0 ); @@ -130,6 +131,7 @@ public: int getNullPosition() const; int getLineWidth() const; int getCornerRaduis() const { return cornerRadius; } + int getLineCapStyle() const { return lineCapStyle; } bool getShowPercent() const; bool getShowFree() const; @@ -176,6 +178,8 @@ public Q_SLOTS: void setNullPosition ( int nullPosition ); /*设置线条宽度*/ void setLineWidth ( int lineWidth ); + /*设置线条的帽子(线头)的样式 = Qt::PenCapStyle*/ + void setLineCapStyle ( int lineCapStyle ); /*设置是否显示百分比*/ void setShowPercent ( bool showPercent ); @@ -231,13 +235,13 @@ signals: public slots: protected: - void paintEvent ( QPaintEvent* ); - void drawBackground ( QPainter* painter, int radius ); - void drawArc ( QPainter* painter, int radius ); - void drawPolo ( QPainter* painter, int radius ); - void drawWave ( QPainter* painter, int radius ); - void drawText ( QPainter* painter, int radius ); - void drawPercentText ( QPainter* painter, int radius ); + virtual void paintEvent ( QPaintEvent* ); + virtual void drawBackground ( QPainter* painter, int radius ); + virtual void drawArc ( QPainter* painter, int radius ); + virtual void drawPolo ( QPainter* painter, int radius ); + virtual void drawWave ( QPainter* painter, int radius ); + virtual void drawText ( QPainter* painter, int radius ); + virtual void drawPercentText ( QPainter* painter, int radius ); private: int maxValue; /*最小值*/ @@ -246,6 +250,7 @@ private: int nullPosition; /*起始角度*/ int lineWidth; /*线条宽度*/ + int lineCapStyle; /*线条的帽子(线头)的样式*/ bool showPercent; /*是否显示百分比*/ QString text; /*文字*/ diff --git a/src/exquisite/qqtpicturetabbar.cpp b/src/exquisite/qqtpicturetabbar.cpp index 38a22bde..ad72cd51 100644 --- a/src/exquisite/qqtpicturetabbar.cpp +++ b/src/exquisite/qqtpicturetabbar.cpp @@ -158,13 +158,27 @@ void QQtPictureTabBar::drawPicture ( QPainter* p ) { p->save(); int sel = currentIndex() == index ? BTN_PRESS : BTN_NORMAL; +#if 1 //tabRect = rect()? p->drawPixmap ( tRect0, QIcon ( imgList[index][sel] ).pixmap ( tRect0.size(), QIcon::Normal, QIcon::On ) ); +#endif + /* * 失真不明显,使用以下方法 */ - //QImage image(iconList[index][sel]); - //p.drawItemPixmap(tabRectValue, Qt::AlignLeft |Qt::AlignTop, QPixmap::fromImage(image.scaled(tabRectValue.size(), Qt::KeepAspectRatio))); +#if 0 + QImage image ( iconList[index][sel] ); + p.drawItemPixmap ( tabRectValue, Qt::AlignLeft | Qt::AlignTop, QPixmap::fromImage ( image.scaled ( tabRectValue.size(), + Qt::KeepAspectRatio ) ) ); +#endif + + //需要QStylePainter支援 + //为什么不用这个呢?因为上边那个QIcon直接缩放到了完整的符合Icon大小的图.直接居中. + //这个不需要,多次一举. +#if 0 + p->drawItemPixmap ( tRect0, Qt::AlignCenter, QIcon ( imgList[index][sel] ).pixmap ( tRect0.size(), QIcon::Normal, + QIcon::On ) ); +#endif p->restore(); } } diff --git a/src/widgets/qqtprogressbar.cpp b/src/widgets/qqtprogressbar.cpp index 14a16aa3..cf7e7196 100644 --- a/src/widgets/qqtprogressbar.cpp +++ b/src/widgets/qqtprogressbar.cpp @@ -16,8 +16,8 @@ QQtProgressBar::QQtProgressBar ( QWidget* parent ) : m_trunk = "./skin/default/bk_progress_trunk.png"; ui->widthTrunk->setPixmap ( m_trunk ); ui->widgetBack->setPixmap ( m_back ); - ui->widthTrunk->setType ( QQtWidget::QQTTILEDWIDTH ); - ui->widgetBack->setType ( QQtWidget::QQTZOOMWIDTH ); + ui->widthTrunk->setImageStyle ( QQtWidget::QQTTILEDWIDTH ); + ui->widgetBack->setImageStyle ( QQtWidget::QQTZOOMWIDTH ); } QQtProgressBar::~QQtProgressBar() diff --git a/src/widgets/qqtwidget.cpp b/src/widgets/qqtwidget.cpp index 27ffd387..74f187d1 100644 --- a/src/widgets/qqtwidget.cpp +++ b/src/widgets/qqtwidget.cpp @@ -20,7 +20,7 @@ QQtWidget::~QQtWidget() void QQtWidget::setPixmap ( const QString& pic ) { - bool ret = mImg.load ( pic ); + bool ret = mImage.load ( pic ); /*请确认文件是否拷贝成功。*/ //pline() << ret << mImg.isNull(); update(); @@ -28,19 +28,19 @@ void QQtWidget::setPixmap ( const QString& pic ) void QQtWidget::setPixmap ( const QPixmap& pixmap ) { - mImg = pixmap.toImage(); + mImage = pixmap.toImage(); update(); } void QQtWidget::setPixmap ( const QImage& image ) { - mImg = image; + mImage = image; update(); } void QQtWidget::paintEvent ( QPaintEvent* event ) { - if ( mImg.isNull() ) + if ( mImage.isNull() ) return QWidget::paintEvent ( event ); QStylePainter p ( this ); @@ -49,18 +49,52 @@ void QQtWidget::paintEvent ( QPaintEvent* event ) { case QQTCENTER: { - /* + /** * 要达到居中的目标,QImage需要做的size判断很繁复,这里使用QIcon做一些中间转换的后续转换,可以很容易的达到绘制合理大小的pixmap的目的。 * source: pixmap file image * QImage 输入、输出两侧是pixmap * 借助(+QIcon) QIcon 输入、输出两侧也是pixmap * dest: 所需要的、合理大小的pixmap */ + //这个也不行.???不能缩放... +#if 0 + QPixmap pix; + pix.convertFromImage ( mImage ); + p.drawPixmap ( rect(), pix ); +#endif + + //计算繁琐 +#if 0 + QSize rSize = rect().size(); + QSize iSize = mImage.rect().size(); + int lX = iSize.width() <= rSize.width() ? iSize.width() : rSize.width(); + int lY = iSize.height() <= rSize.height() ? iSize.height() : rSize.height(); + QSize mSize ( lX, lY ); + p.drawItemPixmap ( rect(), Qt::AlignCenter, QPixmap::fromImage ( mImage.scaled ( mSize, Qt::KeepAspectRatio ) ) ); +#endif + + //缩小图片的时候,失败了.???不是的,外部使用的时候请注意,你的widget最小大小是不是0,0.如果不是,那么你的fixedSize是不是太小了,能设置成功吗? + //写法复杂 +#if 0 QIcon icon; - icon.addPixmap ( QPixmap::fromImage ( mImg ), QIcon::Normal, QIcon::On ); + icon.addPixmap ( QPixmap::fromImage ( mImage ), QIcon::Normal, QIcon::On ); p.drawItemPixmap ( rect(), Qt::AlignCenter, icon.pixmap ( rect().size(), QIcon::Normal, QIcon::On ) ); - //QSize mSize = mImg.rect() > rect() ? rect().size() : mImg.size(); - //p.drawItemPixmap ( rect(), Qt::AlignCenter, QPixmap::fromImage ( mImg.scaled ( mSize, Qt::KeepAspectRatio ) ) ); +#endif + + //经过验证, + //QIcon的构造函数参数为pixmap的有bug,不能正常获得完整pixmap. + //QIcon的构造函数参数为QString的是正常的. + //以上结论错误,都是好的,没有bug,受到了外部widget,setMinimumSize的限定蛊惑,setFixedSize无效导致的. + //不居中. +#if 0 + p.drawPixmap ( rect(), QIcon ( QPixmap::fromImage ( mImage ) ).pixmap ( rect().size(), QIcon::Normal, QIcon::On ) ); +#endif + +#if 1 + p.drawItemPixmap ( rect(), Qt::AlignCenter, QIcon ( QPixmap::fromImage ( mImage ) ).pixmap ( rect().size(), + QIcon::Normal, QIcon::On ) ); +#endif + } break; @@ -68,7 +102,7 @@ void QQtWidget::paintEvent ( QPaintEvent* event ) { p.drawItemPixmap ( rect(), Qt::AlignLeft | Qt::AlignTop, /*.copy() 切出图片的左上部分使用*/ - QPixmap::fromImage ( mImg.copy ( rect() ) + QPixmap::fromImage ( mImage.copy ( rect() ) .scaledToWidth ( rect().width() ) ) ); } @@ -78,8 +112,8 @@ void QQtWidget::paintEvent ( QPaintEvent* event ) { p.drawItemPixmap ( rect(), Qt::AlignLeft | Qt::AlignTop, /*不.copy() 切出图片的中间部分使用*/ - QPixmap::fromImage ( mImg - .scaled ( rect().width(), mImg.height(), Qt::IgnoreAspectRatio ) + QPixmap::fromImage ( mImage + .scaled ( rect().width(), mImage.height(), Qt::IgnoreAspectRatio ) ) ); } break; @@ -108,7 +142,7 @@ void QQtWidget::mouseReleaseEvent ( QMouseEvent* event ) { m_lcTimer->stop(); emit click(); - emit clickWithPoint(event->pos()); + emit clickWithPoint ( event->pos() ); } return QWidget::mouseReleaseEvent ( event ); @@ -117,13 +151,13 @@ void QQtWidget::mouseReleaseEvent ( QMouseEvent* event ) void QQtWidget::mouseDoubleClickEvent ( QMouseEvent* event ) { emit doubleClick(); - emit doubleClickWithPoint(event->pos()); + emit doubleClickWithPoint ( event->pos() ); return QWidget::mouseDoubleClickEvent ( event ); } void QQtWidget::slot_timeout() { emit longClick(); - emit longClickWithPoint(mlongClickPoint); + emit longClickWithPoint ( mlongClickPoint ); } diff --git a/src/widgets/qqtwidget.h b/src/widgets/qqtwidget.h index cc0ccf81..dba2f722 100644 --- a/src/widgets/qqtwidget.h +++ b/src/widgets/qqtwidget.h @@ -1,4 +1,4 @@ -#ifndef QQTWIDGET_H +#ifndef QQTWIDGET_H #define QQTWIDGET_H #include @@ -22,6 +22,9 @@ public: enum ImageStyle { + /** + * 整个居中,全面缩放显示 + */ QQTCENTER, /* * 会产生label的效果,左右按照rect长,但是不缩放形状 @@ -31,7 +34,7 @@ public: QQTZOOMWIDTH, QQTZOOMHEIGHT, }; - void setType ( ImageStyle style = QQTCENTER ) { m_style = style; } + void setImageStyle ( ImageStyle style = QQTCENTER ) { m_style = style; } void setPixmap ( const QString& pic = QString() ); void setPixmap ( const QPixmap& pixmap ); @@ -43,9 +46,9 @@ signals: void longClick(); signals: - void clickWithPoint(QPoint point); - void doubleClickWithPoint(QPoint point); - void longClickWithPoint(QPoint point); + void clickWithPoint ( QPoint point ); + void doubleClickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); // QWidget interface protected: @@ -66,7 +69,7 @@ private: /*pixmap是必要的。绘图用pixmap。*/ /*内部没有使用QPixmap存储,因为如果缩放widget,pixmap就没办法了,img有*/ /*内部对QIcon的使用删除了,icon不是必要的。*/ - QImage mImg; + QImage mImage; //for longClickWithPoint() QPoint mlongClickPoint; };