рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ
рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд▓рд┐рдЦрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдЦреБрд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рднреА TODO, FIXME, рдЖрджрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд▓ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛, рдЬреЛ рдХрд╛рдлреА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдХрд▓рд╛, рдпрд╣рд╛рдБ рдкреНрд░рдореБрдЦ рд╣реИрдВ:
- рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджрд┐рдЦрд╛рдИ рджреАрдВ
- рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдЦреЛрдЬ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдФрд░ рдЖрдЗрдХрди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЖрдк рдпрд╣ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдП: рдорд╛рдирдХ рдореЗрдВ "рд╕рдорд╕реНрдпрд╛рдПрдБ рдмрдирд╛рдПрдБ" рд╡рд┐рдВрдбреЛ рдпрд╛ рдПрдХ рдЕрд▓рдЧ "TODO рдЖрдЙрдЯрдкреБрдЯ" рдореЗрдВред
- рдЖрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ: рдЕрднреА рднреА рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдпрд╛ рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░реЗрдВред
- рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЕрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЛрдВ рдХреЛ рдЦреЛрджрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬреЛ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рддрд╣рдд рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореБрдЭреЗ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдереА рд╡рд╣ рдпрд╣ рдереА рдХрд┐ 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;
рдЯреИрдм рд╡рд┐рдЬреЗрдЯ рдЬреЛ рдореИрдВрдиреЗ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдорд╛рдирдХ QlistWidget, рдХрдИ QRadioButton рдФрд░ рдмрдЯрдиреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ (рдЫрд╡рд┐ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рдХреБрдВрдЬреА
рд▓рд╛рдЧреВ () рд╡рд┐рдзрд┐ рд╣реИ, рдпрд╣ рдЙрд╕ рдореЗрдВ рд╣реИ рдХрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
void SettingsPage::apply() { if (settingsStatus) { QSettings *settings = Core::ICore::instance()->settings();
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣ рдпрд╛рдж рд╣реЛрдЧрд╛ рдХрд┐ QVariant рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: << рдФрд░ >>, рдФрд░ рдЙрдиреНрд╣реЗрдВ MOC рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рднреА рдХрд░реЗрдВред
рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдБ
рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рдкрд░, рдЗрд╕реЗ рдЯрд╛рд╕реНрдХрд╡рд┐рдВрдбреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ 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);
рдЖрдк рдХреНрдпрд╛ рдЬрд╛рджреВ рдкреВрдЫрддреЗ рд╣реИрдВ? рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╣реЗрдбрд░ рдФрд░ рдЗрд╕рдХреЗ рдХреЙрд▓ рдкрд░, рд╣реЗрдбрд░ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рджреВрд╕рд░рд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ (qtconcurrent / runextensions.h) рд╕реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рдЬрд╛рджреВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЖрдк рдЕрднреА рднреА
рдпрд╣рд╛рдБ рд╕реЗ рдкреНрд▓рдЧрдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ , рдпрд╣ рдмреАрдПрд╕рдбреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧред рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред