QtCreator TODO рдкреНрд▓рдЧрдЗрдиред рд╡рд┐рд╕реНрддрд╛рд░

рдЯреЛрдбреЛ рдкреНрд▓рдЧрдЗрди



рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЦреБрд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рднреА TODO, FIXME, рдЖрджрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд▓ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЬреЛ рдХрд╛рдлреА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдХрд▓рд╛, рдпрд╣рд╛рдБ рдкреНрд░рдореБрдЦ рд╣реИрдВ:



рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЛ рдЦреЛрджрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬреЛ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред



рд╕реЗрдЯрд┐рдВрдЧреНрд╕



рд╕реЗрдЯрд┐рдВрдЧреНрд╕



рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореБрдЭреЗ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдереА рд╡рд╣ рдпрд╣ рдереА рдХрд┐ QtCreator рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЯреИрдм рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдХреЛрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ : IOptionsPage рдЗрдВрдЯрд░рдлрд╝реЗрд╕ , рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

class SettingsPage : public Core::IOptionsPage { Q_OBJECT public: SettingsPage(KeywordsList keywords = KeywordsList(), int projectOptions = 0, int paneOptions = 0, QObject *parent = 0); ~SettingsPage(); QString id() const; //    QString trName() const; //    (   ) QString category() const; //        QString trCategory() const; //    (   ) QString displayName() const; //    QIcon categoryIcon() const; //   QString displayCategory() const; //    QWidget *createPage(QWidget *parent); //      void apply(); //       "Apply"  "OK" void finish(); //        - "OK"  "Cancel" public slots: void settingsChanged(); private: SettingsDialog *dialog; //   bool settingsStatus; //  ? int projectOptions; //   int paneOptions; //   KeywordsList keywords; //    };
      
      





рдЯреИрдм рд╡рд┐рдЬреЗрдЯ рдЬреЛ рдореИрдВрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдорд╛рдирдХ QlistWidget, рдХрдИ QRadioButton рдФрд░ рдмрдЯрдиреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ (рдЫрд╡рд┐ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рдХреБрдВрдЬреА рд▓рд╛рдЧреВ () рд╡рд┐рдзрд┐ рд╣реИ, рдпрд╣ рдЙрд╕ рдореЗрдВ рд╣реИ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред



рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 void SettingsPage::apply() { if (settingsStatus) { QSettings *settings = Core::ICore::instance()->settings(); //      settings->beginGroup("TODOPlugin"); //    projectOptions = dialog->currentFileRadioButtonEnabled() ? 0 : 1; //     paneOptions = dialog->todoOutputRadioButtonEnabled() ? 0 : 1; keywords = dialog->keywordsList(); settings->setValue("project_options", projectOptions); //   settings->setValue("pane_options", paneOptions); settings->setValue("keywords", qVariantFromValue(keywords)); settings->endGroup(); settings->sync(); //   (   ) QMessageBox::information(dialog, tr("Information"), tr("The TODO plugin settings change will take effect after a restart of Qt Creator.")); //           settingsStatus = false; } }
      
      





рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣ рдпрд╛рдж рд╣реЛрдЧрд╛ рдХрд┐ QVariant рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: << рдФрд░ >>, рдФрд░ рдЙрдиреНрд╣реЗрдВ MOC рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рднреА рдХрд░реЗрдВред



рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБ



taskwindow



рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рдкрд░, рдЗрд╕реЗ рдЯрд╛рд╕реНрдХрд╡рд┐рдВрдбреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ Qt Developer Network рд╕рдореБрджрд╛рдп рдХреЗ рд▓реЛрдЧреЛрдВ рдХреА рдордЬрдмреВрдд рд╕рд▓рд╛рд╣ рдкрд░ рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рд▓рд┐рдЦрд╛ рдерд╛ред рдЖрдк рдЗрд╕ рд╡рд┐рдВрдбреЛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЗрдбрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 #include <projectexplorer/taskwindow.h>
      
      





рдФрд░ рдЦрд┐рдбрд╝рдХреА рд╕реЗ рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

 taskWindow = pluginManager->getObject<ProjectExplorer::TaskWindow>();
      
      





рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рдЖрдк рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВ:

 void addCategory(const QString &categoryId, const QString &displayName); void addTask(const Task &task); void removeTask(const Task &task); void clearTasks(const QString &categoryId = QString());
      
      







рд╣рдорд╛рд░реА рдкреЛрд╕реНрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХрд╛рд░реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 struct PROJECTEXPLORER_EXPORT Task { enum TaskType { Unknown, Error, Warning }; Task() : type(Unknown), line(-1) { } Task(TaskType type_, const QString &description_, const QString &file_, int line_, const QString &category_) : type(type_), description(description_), file(file_), line(line_), category(category_) { } Task(const Task &source) : type(source.type), description(source.description), file(source.file), line(source.line), category(source.category), formats(source.formats) { } ~Task() { } TaskType type; QString description; QString file; int line; QString category; QList<QTextLayout::FormatRange> formats; };
      
      





рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдЖрдкрдХреЛ ProjectExplorer рдкрд░ рдкреНрд▓рдЧрдЗрди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ



progressbar



рдкреНрд░рдЧрддрд┐рдмрд╛рд░ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛рдУрдВ рдХреЛ рд▓реЗ рдЧрдпрд╛ред рд╕реНрдХреИрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдзреАрдорд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд░рдЦрд╛:

  QFuture<void> result = QtConcurrent::run(&TodoPlugin::readCurrentProject, this);
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рдкреНрдпрд╛рд░реА рдЧреНрд░реЗ-рдЧреНрд░реАрди рдкреНрд░рдЧрддрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдзрд╛рд░рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд▓рд╡рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗ:

 #include <coreplugin/progressmanager/progressmanager.h> #include <qtconcurrent/runextensions.h>
      
      





рдПрдХ рдирдИ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдЬреЛрдбрд╝рдирд╛ рдЗрд╕ рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ:

  Core::ICore::instance()->progressManager()->addTask(result, tr("Todoscan"), "Todo.Plugin.Scanning");
      
      





рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреИрди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 void TodoPlugin::readCurrentProject(QFutureInterface<void> &future, TodoPlugin *instance) { QStringList filesList = instance->currentProject->files(ProjectExplorer::Project::ExcludeGeneratedFiles); //    future.setProgressRange(0, filesList.count()-1); //    for (int i = 0; i < filesList.count(); ++i) { instance->readFile(filesList.at(i)); //    future.setProgressValue(i); //    } // SKIPPED }
      
      





рдЖрдк рдХреНрдпрд╛ рдЬрд╛рджреВ рдкреВрдЫрддреЗ рд╣реИрдВ? рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдХреЙрд▓ рдкрд░, рд╣реЗрдбрд░ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рджреВрд╕рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ (qtconcurrent / runextensions.h) рд╕реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рдЬрд╛рджреВ рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдк рдЕрднреА рднреА рдпрд╣рд╛рдБ рд╕реЗ рдкреНрд▓рдЧрдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдпрд╣ рдмреАрдПрд╕рдбреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧред рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред



All Articles