⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initcompletion.cpp

📁 用Qt4编写的linux IDE开发环境
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        tag.returned = tag.returned.section(" ", 0, 0);        if ( tag.returned.contains("<") )            tag.returned = tag.returned.section("<", 0, 0);        QString inherits;        if ( s.contains("inherits:") )            inherits = s.section("inherits:", -1, -1).section("\t", 0, 0).simplified();        if ( !inherits.isEmpty() )        {            inheritsList[ classname ] = inherits;        }        if ( tag.kind != "prototype" && tag.kind != "function" && tag.kind != "member" )            continue;        if ( tag.name=="Q_REQUIRED_RESULT" )        {            if ( tag.longName.contains("(") )            {                tag.name = tag.longName.remove("const ").section(" ", 1, 1).section("(", 0, 0);                tag.kind = "function";                tag.parameters = tag.signature = "(" + tag.longName.section("(", 1, 1).section(")", -2, -2) + ")";                tag.access = "public";                tag.isFunction = true;            }        }        if ( tag.name=="Q_REQUIRED_RESULT" || tag.name.at(0)=='&' || tag.name.at(0)=='*' )            continue;        if( tag.name == classname || tag.name == "~"+classname )        	continue;        TagList list;        list = map[classname];        bool alreadyInserted = false;        foreach(Tag t, list)        {            if ( t.name == tag.name && t.parameters == tag.parameters )            {                alreadyInserted = true;                break;            }        }        if ( !alreadyInserted )        {            list << tag;            map[classname] = list;        }    }   // if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) )    //{        //return;    //}    //createTables();    QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" ));    query.exec("BEGIN TRANSACTION;");    query.exec("delete from tags");    QStringList keys = map.keys();    foreach(QString key, keys)    {        if ( m_stopRequired )            break;        TagList tagList = map[key];        Expression exp;        exp.className = key;        writeToDB(exp, tagList, query);    }    writeInheritanceToDB(inheritsList, query);    query.exec("END TRANSACTION;");}////void InitCompletion::writeInheritanceToDB(QMap<QString, QString> inheritsList, QSqlQuery query){    QMapIterator<QString, QString> it(inheritsList);    while (it.hasNext())    {        it.next();        foreach(QString parent, it.value().split(",", QString::SkipEmptyParts ) )        {            QString queryString = "insert into inheritance values(";            queryString = queryString                          + "'" + parent.replace("'", "$") + "', "                          + "'" + QString(it.key()).replace("'", "$") + "')";            bool rc = query.exec(queryString);            if (rc == false)            {                qDebug() << "Failed to insert record to db" << query.lastError();                qDebug() << queryString;                return;            }        }    }}//QStringList InitCompletion::inheritanceList( const QString classname, QStringList &list ){	/* Return a string list with inheritance classes for classname. Work with the classes browser. 	For the Qt classes, the inheritance is read in qdevelop.db. */    const QList<ParsedItem> *itemsList = m_treeClasses->treeClassesItems();    for (int i = 0; i < itemsList->size(); ++i)    {        if ( itemsList->at( i ).kind == "c" && itemsList->at( i ).name == classname         	&& itemsList->at( i ).ex_cmd.contains(":") )        {            QString ex_cmd = itemsList->at( i ).ex_cmd;            ex_cmd = ex_cmd.left( ex_cmd.length()-3 );            ex_cmd = ex_cmd.section(":", 1);            ex_cmd = ex_cmd.remove("public").remove("protected").remove("private").remove(" ");            foreach(QString c, ex_cmd.split(",") )            {                list << c;                list = inheritanceList(c, list);            }        }    }    //    QString queryString = QString()                          + "select * from inheritance where child='"+classname+"'";    QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" ));    query.exec(queryString);    while (query.next())    {        QString parent = query.value(0).toString().replace("$", "'");        if ( !parent.isEmpty() )        {            list << parent;    		list = inheritanceList(parent, list);        }    }    return list;}//Expression InitCompletion::parseLine( QString text ){    Expression exp;    Scope sc;    int p = 0;    QString simplified = simplifiedText( text );    int begin = simplified.length()-1;    do    {        begin--;    	if( simplified[begin]=='(' )    		p--;    	else if( simplified[begin]==')' )    		p++;    	if( p > 0 && !(p == 1 && simplified[begin]==')') )    		simplified[begin]=' ';    	if( QString(";{}=*/+~&|!^?:,<>").contains(simplified[begin]) )    		break;    	else if( begin<simplified.length()-1 && simplified[begin]=='-' && simplified[begin+1]!='>' )    		break;    	else if( ( simplified[begin]=='(' && p<0) )    		break;   	} while(begin>0);	//	QString word = simplified.mid(begin+1).simplified();	int posWord = 0;	while( posWord<word.length()-1 && (word.at( posWord ).isLetterOrNumber() || word.at( posWord )=='_') )		posWord++;	word = word.left(posWord);	////QD << simplified.left(begin+1);    while ( begin<simplified.length() && simplified[begin]!='.'      		&& !(begin>0 && simplified[begin-1]=='-' && simplified[begin]=='>' )    		&& !(begin>0 && simplified[begin-1]==':' && simplified[begin]==':' )    	)        begin++;    QString varName = simplified.left(begin+1);    QString line = simplified.mid(begin+1);    exp = getExpression(varName, sc, m_showAllResults);    QString className;    if ( exp.access == ParseError )    {    	className = word;    	exp.access = AccessMembers;   	}    else    	className = exp.className;//QD << varName << className;    //    while ( line.indexOf('.')!=-1 || line.indexOf(">")!=-1  || line.indexOf("::")!=-1 )    {        QString function;        int end = 9999;        if( line.indexOf('.') != -1 )        	end = qMin(end, line.indexOf('.'));        if( line.indexOf('>') != -1 )        	end = qMin(end, line.indexOf('>'));        if( line.indexOf(':') != -1 )        	end = qMin(end, line.indexOf(':')+1);       	function = line.left(end);        line = line.mid(end+1);        className = returned(className, function, exp);    }    exp.className = className;    return exp;}//QString InitCompletion::returned(QString className, QString function, Expression &exp){    QStringList classes;    classes << className;    if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) )    {        return QString();    }    classes = inheritanceList(className, classes);    //	function = function.section("(", 0, 0).simplified();    const QList<ParsedItem> *itemsList = m_treeClasses->treeClassesItems();    for (int i = 0; i < itemsList->size(); ++i)    {        ParsedItem parsedItem = itemsList->at( i );        Tag tag;        tag.access = parsedItem.access;        tag.name = parsedItem.name;        tag.parameters = parsedItem.signature;        tag.returned = parsedItem.ex_cmd.section(" ", 0, 0);        if ( tag.returned.contains("<") )            tag.returned = tag.returned.section("<", 0, 0);        if ( parsedItem.kind == "f" )            tag.kind = "function";        else if ( parsedItem.kind == "p" )            tag.kind = "prototype";        else if ( parsedItem.kind == "e" )        {            if (  parsedItem.enumname.section(":", 0, 0) != className )                continue;            parsedItem.classname = className;            tag.parameters = "";            tag.kind = "member";        }        else if ( parsedItem.kind == "m" )        {            tag.kind = "member";            tag.parameters = "";        }        else        {            continue;        }//        bool isStatic = parsedItem.ex_cmd.simplified().startsWith("static");        if ( !classes.contains( parsedItem.classname ) )            continue;        if( classes.contains( parsedItem.classname ) && function == parsedItem.name )        {        	        	exp.access = AccessMembers;        	return tag.returned;       	}    }    // Continue the reading in qdevelop.db    createTables();    QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" ));    query.exec("BEGIN TRANSACTION;");    QString queryString = QString()                          + "select * from inheritance where child='"+className+"'";    query.exec(queryString);    while (query.next())    {        QString parent = query.value(0).toString().replace("$", "'");        if ( !parent.isEmpty() )        {            classes << parent;        }    }    queryString = QString()                  + "select * from tags where class in ( ";    foreach(QString c, classes)    {        queryString = queryString + " '" + c + "',";    }    queryString = queryString.left( queryString.length()-1 );    queryString += " )";    //    queryString += " and name = '" + function + "'";    query.exec(queryString);    if (query.next())    {      	exp.access = AccessMembers;       	return query.value(7).toString().replace("$", "'");    }	return QString();}//QString InitCompletion::classForFunction(QString classname, QString function){	/*  Return the name of the first class which contains the function. In		a class Foo which inherits QDialog, if the help is called on the function foo->show().		We receive Foo as classname and show as function. We find the first class in inheritance list		which contains really the function and return it. Here, it's QWidget. Thus Assistant can be called		with the right parameters.	*/    if ( !connectQDevelopDB( getQDevelopPath() + "qdevelop.db" ) )    {        return QString();    }	QStringList list;	list << classname;	list = inheritanceList(classname, list);    createTables();    QSqlQuery query(QSqlDatabase::database(getQDevelopPath() + "qdevelop.db" ));	foreach(QString name, list)	{	    QString queryString = QString()	                  + "select * from tags where class ='" + name + +"'";	    queryString += " and name='" + function + "'";	    //	    query.exec(queryString);	    while (query.next())	    {	    	return query.value(0).toString().replace("$", "'");	    }	}	return QString();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -