本文整理汇总了C++中GraphEdge::getSourceNode方法的典型用法代码示例。如果您正苦于以下问题:C++ GraphEdge::getSourceNode方法的具体用法?C++ GraphEdge::getSourceNode怎么用?C++ GraphEdge::getSourceNode使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GraphEdge
的用法示例。
在下文中一共展示了GraphEdge::getSourceNode方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addEdgeCommand
void GraphView::addEdgeCommand(bool undirected)
{
if (edgeSource) {
GraphNode* edgeDestination = dynamic_cast<GraphNode*>(selectedItem);
if (edgeDestination && edgeSource != edgeDestination) {
GraphEdge* existingEdge = NULL;
bool drawAsArc(false);
QListIterator<GraphEdge*> it(edgeSource->getDestinationEdges());
while (it.hasNext() && !existingEdge) {
GraphEdge* edge = it.next();
if (edge->getSourceNode() == edgeDestination)
existingEdge = edge;
}
if (existingEdge) {
if (!existingEdge->isUndirected()) {
if (weightedGraph && !undirectedGraph && currentAction == ADD_DIRECTED_EDGE) {
existingEdge->setDrawAsArc(true);
drawAsArc = true;
existingEdge = NULL;
}
else
undoStack->push(new ChangeEdgeDirectionCommand(existingEdge, false, true));
}
}
else {
it = QListIterator<GraphEdge*>(edgeSource->getSourceEdges());
while (it.hasNext() && !existingEdge) {
GraphEdge* edge = it.next();
if (edge->getDestinationNode() == edgeDestination) {
existingEdge = edge;
if (currentAction == ADD_UNDIRECTED_EDGE)
undoStack->push(new ChangeEdgeDirectionCommand(existingEdge, false, true));
}
}
}
if (existingEdge) {
scene()->removeItem(currentEdge);
delete currentEdge;
}
else {
currentEdge->setDestinationNode(edgeDestination);
currentEdge->setDrawAsArc(drawAsArc);
undoStack->push(new AddEdgeCommand(currentEdge, this));
}
currentEdge = NULL;
edgeSource = NULL;
}
}
else if (selectedItem) {
edgeSource = dynamic_cast<GraphNode*>(selectedItem);
currentEdge = new GraphEdge(edgeSource, edgeSource->getCenter(), undirected, !undirectedGraph, weightedGraph, false);
// Setting the Z value makes sure the selection of nodes are made correct
currentEdge->setZValue(-1);
scene()->addItem(currentEdge);
}
updateStatus();
}
示例2: executeContextMenu
void GraphView::executeContextMenu(const QPoint& menuPosition)
{
QMenu menu;
GraphNode* node = dynamic_cast<GraphNode*>(selectedItem);
GraphEdge* edge = dynamic_cast<GraphEdge*>(selectedItem);
if (node) {
QAction *changeLabelAction = menu.addAction("Change label");
QAction *deleteAction = menu.addAction("Delete vertex");
QAction *selectedAction = menu.exec(menuPosition);
if (selectedAction == changeLabelAction)
changeLabel(node);
else if (selectedAction == deleteAction)
removeItemCommand(node);
}
else if (edge){
QAction *changeWeightAction(NULL);
if (weightedGraph)
changeWeightAction = menu.addAction("Change weight");
QAction *changeDirectionSDAction(NULL);
QAction *changeDirectionDSAction(NULL);
QAction *changeUndirectedAction(NULL);
if (!undirectedGraph) {
QMenu *changeDirectionMenu = new QMenu("Change direction");
menu.addMenu(changeDirectionMenu);
QString sourceLabel = edge->getSourceNode()->getLabel();
if (sourceLabel.isEmpty())
sourceLabel = "no_label";
QString destinationLabel = edge->getDestinationNode()->getLabel();
if (destinationLabel.isEmpty())
destinationLabel = "no_label";
changeDirectionSDAction = changeDirectionMenu->addAction(sourceLabel + " -> " + destinationLabel);
changeDirectionDSAction = changeDirectionMenu->addAction(destinationLabel + " -> " + sourceLabel);
changeUndirectedAction = changeDirectionMenu->addAction("Change to undirected");
if (edge->isUndirected())
changeUndirectedAction->setEnabled(false);
else
changeDirectionSDAction->setEnabled(false);
}
QAction *deleteAction = menu.addAction("Delete edge");
QAction *selectedAction = menu.exec(menuPosition);
if (selectedAction) {
if (selectedAction == deleteAction)
removeItemCommand(edge);
else if (selectedAction == changeWeightAction)
changeWeight(edge);
else if (selectedAction == changeDirectionSDAction)
undoStack->push(new ChangeEdgeDirectionCommand(edge, false, false));
else if (selectedAction == changeDirectionDSAction)
undoStack->push(new ChangeEdgeDirectionCommand(edge, true, false));
else if (selectedAction == changeUndirectedAction)
undoStack->push(new ChangeEdgeDirectionCommand(edge, false, true));
}
}
}