QT编程实用大全(5)

2019-08-29 18:29

proxyWidget->setWidget(stackedWidget); scene->addItem(proxyWidget);

//view->resize(200,200);

view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); //view->setBackgroundBrush(QPixmap(―:/No-Ones-Laughing-3.jpg‖)); view->setCacheMode(QGraphicsView::CacheBackground);

view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->setBackgroundBrush(QColor(―#151C28″));// }

====================================================================== 事件原型申明中的类型定义不能加默认值

============================================ QPainterPath 画出的图形会闪烁的问题: 用下面的写法画出的图形会闪烁 class MyClass: public QWidget {

public:

MyClass(QWidget*); private:

QPainterPath* route;

void paintEvent(QPaintEvent*e); };

MyClass::MyClass() {

route = new QPainterPath();

}

void MyClass::paintEvent( QPaintEvent*e) {

QPainter *painter = new QPainter(this); //画校正图形

int insideR = 30; int outsideR = 50;

QColor insideColor(237,29,12); //内圆线条颜色 QColor outSideColor(237,29,12); //外圆线条颜色

QColor lineColor(237,29,12); //直线颜色

QColor insideBrushColor(255,0,0,25);//内圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) )

QColor outsideBrushColor(255,0,0,50);//外圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) )

//QPainterPath path;

route->moveTo(insideR,0); route->lineTo(outsideR,0);

route->arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,0,180); route->lineTo(0-insideR,0);

route->arcTo(0-insideR,0-insideR,insideR*2,insideR*2,0,180); route->moveTo(0-insideR,0);

route->lineTo(0-outsideR,0);

route->arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,180,180); route->lineTo(insideR,0);

route->arcTo(0-insideR,0-insideR,insideR*2,insideR*2,180,180); painter->setPen(Qt::NoPen);

painter->setBrush(outsideBrushColor); painter->drawPath(*route); painter->setBrush(Qt::NoBrush); painter->setPen(outSideColor);

painter->drawEllipse( QPointF(0,0),outsideR,outsideR ); painter->setBrush(insideBrushColor); painter->setPen(insideColor);

painter->drawEllipse( QPointF(0,0),insideR,insideR ); painter->setPen(lineColor);

QPoint p1(0, 0- outsideR – 10 ); QPoint p2(0, outsideR + 10 ); painter->drawLine(p1,p2); painter->rotate(90); painter->drawLine(p1,p2); painter->rotate(-90); delete painter; }

如下用下面的写法则不会闪烁:

void MyClass::paintEvent( QPaintEvent*e) {

QPainter *painter = new QPainter(this); //画校正图形 int insideR = 30;

int outsideR = 50;

QColor insideColor(237,29,12); //内圆线条颜色 QColor outSideColor(237,29,12); //外圆线条颜色 QColor lineColor(237,29,12); //直线颜色

QColor insideBrushColor(255,0,0,25);//内圆画刷颜色,最后的参数代表透明度( 0(完全透

明)-100(不透明) )

QColor outsideBrushColor(255,0,0,50);//外圆画刷颜色,最后的参数代表透明度( 0(完全透明)-100(不透明) ) QPainterPath path; path.moveTo(insideR,0); path.lineTo(outsideR,0);

path.arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,0,180); path.lineTo(0-insideR,0);

path.arcTo(0-insideR,0-insideR,insideR*2,insideR*2,0,180); path.moveTo(0-insideR,0);

path.lineTo(0-outsideR,0);

path.arcTo(0-outsideR,0-outsideR,outsideR*2,outsideR*2,180,180); path.lineTo(insideR,0);

path.arcTo(0-insideR,0-insideR,insideR*2,insideR*2,180,180); painter->setPen(Qt::NoPen);

painter->setBrush(outsideBrushColor); painter->drawPath(path); painter->setBrush(Qt::NoBrush); painter->setPen(outSideColor);

painter->drawEllipse( QPointF(0,0),outsideR,outsideR ); painter->setBrush(insideBrushColor); painter->setPen(insideColor);

painter->drawEllipse( QPointF(0,0),insideR,insideR ); painter->setPen(lineColor);

QPoint p1(0, 0- outsideR – 10 ); QPoint p2(0, outsideR + 10 ); painter->drawLine(p1,p2); painter->rotate(90);

painter->drawLine(p1,p2); painter->rotate(-90); delete painter; }

================================================ 如何让QT程序只运行一次:

以下代码在Ubuntu,win下测试通过: #include #include #include #include #include

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QSystemSemaphore sema(―JAMKey‖,1,QSystemSemaphore::Open); sema.acquire();//在临界区操作共享内存 SharedMemory QSharedMemory mem(―SystemObject‖);//全局对象名 if (!mem.create(1))//如果全局对象以存在则退出 {

qDebug()<

sema.release();//如果是Unix系统,会自动释放。 return 0; }

sema.release();//临界区

QLabel label(―Demo‖); label.show();

return app.exec();//释放栈上的mem对象。 }

========================================= 打印当前代码行所在的文件与行:

qDebug()<<‖所在文件:‖<

pro文件中,请注意 ―RESOURCES += ―不可写成‖RESOURCES = ―;

============================================================ *.pro : unix: DEFINES += __LINUX__ #ifdef __LINUX__ … #else …

#endif

========================================== 取得信号对象指针:

QObject * QObject::sender() const

QToolButton* toolBtn = static_cast(sender());

===========================================

函数申明后面带有const 的函数,函数体里所调用的函数的申明后面肯定也要带有 const 否则,编译不过

=================================== 请教如何在Qt的pro文件中定义字符串宏

在qtcentre中一位高人的方法得到实现: DEFINES += SHARE_DIR=\\\\\\‖字符串\\\\\\‖

==============================================================

如果使用OObject::tr(―你好‖)对汉字进行赋值,但使用 qDebug()打印时出现乱码,有可能是*.cpp文件编码

有误,请把*.cpp文件编码改为UTF-8编码; =================================== error: new types may not be defined in a return type error: return type specification for constructor invalid 请检查类定义后有没加‖;‖

================================================ win下电脑待机方法: static HANDLE hToken;

static TOKEN_PRIVILEGES tp; static LUID luid;

if(::OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)) {

::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid); tp.PrivilegeCount=1;

tp.Privileges[0].Luid =luid;

tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;

::AdjustTokenPrivileges(hToken,false,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL); }

::SetSystemPowerState(true,true);

============================== 改变QMessageBox的大小: 创建一个QMessageBox:

QMessageBox msgBox(this);

msgBox.setWindowTitle(tr(―MailBox Location‖));

msgBox.setInformativeText(tr(―You must ….. and so on and so forth‖)); 像这样改变它的大小:

1). msgbox.setGeometry ( int x, int y, int w, int h ) 2). msgbox.resize(int w, int h) 结果什么都没有发生。

原因:QMessageBox::showEvent() 强制将其大小改变成了QT认为比较合适的大小。要改变它的大小可使用下面这种方法


QT编程实用大全(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015-2016学年河南省洛阳市高一下学期期中考试历史(解析版)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: