本文整理汇总了C++中QValueStack::count方法的典型用法代码示例。如果您正苦于以下问题:C++ QValueStack::count方法的具体用法?C++ QValueStack::count怎么用?C++ QValueStack::count使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QValueStack
的用法示例。
在下文中一共展示了QValueStack::count方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: paintData
//.........这里部分代码省略.........
}
// If there was no value at all, bail out, to avoid endless loops
// later on (e.g. in findPieAt()).
if( !atLeastOneValue )
return;
// Find the backmost pie which is at +90° and needs to be drawn
// first
int backmostpie = findPieAt( 90 * 16 );
// Find the frontmost pie (at -90°/+270°) that should be drawn last
int frontmostpie = findPieAt( 270 * 16 );
// and put the backmost pie on the TODO stack to initialize it,
// but only if it is not the frontmostpie
QValueStack < int > todostack;
if ( backmostpie != frontmostpie )
todostack.push( backmostpie );
else {
// Otherwise, try to find something else
int leftOfCurrent = findLeftPie( backmostpie );
if ( leftOfCurrent != frontmostpie ) {
todostack.push( leftOfCurrent );
} else {
int rightOfCurrent = findRightPie( backmostpie );
if ( rightOfCurrent != frontmostpie ) {
todostack.push( rightOfCurrent );
}
}
// If we get here, there was nothing else, and we will bail
// out of the while loop below.
}
// The list with pies that have already been drawn
QValueList < int > donelist;
// Draw pies until the todostack is empty or only the frontmost
// pie is there
while ( !todostack.isEmpty() &&
!( ( todostack.count() == 1 ) &&
( ( todostack.top() == frontmostpie ) ) ) ) {
// The while loop cannot be cancelled if frontmostpie is on
// top of the stack, but this is also backmostpie (can happen
// when one of the pies covers more than 1/2 of the circle. In
// this case, we need to find something else to put on the
// stack to get things going.
// take one pie from the stack
int currentpie = todostack.pop();
// if this pie was already drawn, ignore it
if ( donelist.find( currentpie ) != donelist.end() )
continue;
// If this pie is the frontmost pie, put it back, but at the
// second position (otherwise, there would be an endless
// loop). If this pie is the frontmost pie, there must be at
// least one other pie, otherwise the loop would already have
// been terminated by the loop condition.
if ( currentpie == frontmostpie ) {
Q_ASSERT( !todostack.isEmpty() );
// QValueStack::exchange() would be nice here...
int secondpie = todostack.pop();
if ( currentpie == secondpie )
// no need to have the second pie twice on the stack,
// forget about one instance and take the third
// instead
if ( todostack.isEmpty() )
break; // done anyway
else
secondpie = todostack.pop();
todostack.push( currentpie );
todostack.push( secondpie );
continue;
}
// When we get here, we can just draw the pie and proceed.
drawOnePie( painter, data, dataset, currentpie, chart,
sizeFor3DEffect,
regions );
// Mark the pie just drawn as done.
donelist.append( currentpie );
// Now take the pie to the left and to the right, check
// whether these have not been painted already, and put them
// on the stack.
int leftOfCurrent = findLeftPie( currentpie );
if ( donelist.find( leftOfCurrent ) == donelist.end() )
todostack.push( leftOfCurrent );
int rightOfCurrent = findRightPie( currentpie );
if ( donelist.find( rightOfCurrent ) == donelist.end() )
todostack.push( rightOfCurrent );
}
// now only the frontmost pie is left to draw
drawOnePie( painter, data, dataset, frontmostpie, chart,
sizeFor3DEffect,
regions );
}