forked from qt-creator/qt-creator
		
	
		
			
	
	
		
			112 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /*! | ||
|  |     \page progress.html | ||
|  |     \title 11.Showing and reacting to progress information | ||
|  |     The progress bars give us the information about the progress status of a current task.We can find  | ||
|  |     progress bar showing up in the Qt Creator window at the left side. Whenever a task is executed | ||
|  |     a progress bar pops up showing the progress status until the task is completed. | ||
|  |      | ||
|  |     \inlineimage qtc-progressbar-11.png | ||
|  |      | ||
|  |     \section1 11.1 Creating a progress bar | ||
|  |     First we will declare the methods required for implementing a "Progress Bar" widget and then we will attach the widget with "Header Filter" in "Find/Replace"  | ||
|  |     and see it working according to the search progress status. | ||
|  |      | ||
|  |     \section2 Step 1. Modification of "HeaderFilter" class      | ||
|  |     The "HeaderFilter" class discussed in Chapter 9. is further modified.  | ||
|  |     So we will now declare the methods required for a  "Progress Bar" in the following block of code.     | ||
|  |     \code | ||
|  |     struct HeaderFilterData; | ||
|  |     class HeaderFilter : public Find::IFindFilter | ||
|  |     { | ||
|  |         Q_OBJECT | ||
|  |     public: | ||
|  |         HeaderFilter(); | ||
|  |         ~HeaderFilter(); | ||
|  |         ... | ||
|  |         QWidget *createProgressWidget(); | ||
|  |      | ||
|  |     private: | ||
|  |         HeaderFilterData *d; | ||
|  |     }; | ||
|  |     \endcode | ||
|  |      | ||
|  |     Here \bold {createProgressWidget()} is not implemented from Find::IFindFilter. It is a custom function written within HeaderFilter class, | ||
|  |     which takes up the onus of returning a progress display widget. | ||
|  |      | ||
|  |     \section2 Step 2. Implementation of the "HeaderFilter" class | ||
|  |     The private member variables of the \bold {HeaderFilter} class are declared in the structure \bold {HeaderFilterData} | ||
|  |     \code | ||
|  |     struct HeaderFilterData | ||
|  |     { | ||
|  |         QFutureWatcher<FileSearchResult> watcher; | ||
|  |         QLabel *resultLabel; | ||
|  |         ... | ||
|  |         ...         | ||
|  |     }; | ||
|  |     \endcode | ||
|  |     The \bold {constructor} and the \bold {destructor} are as follows. | ||
|  |     \code     | ||
|  |     HeaderFilter::HeaderFilter() | ||
|  |     { | ||
|  |          | ||
|  |         d = new HeaderFilterProgressData; | ||
|  |         d->watcher.setPendingResultsLimit(1); | ||
|  |         d->resultLabel = 0 ; | ||
|  |         ... | ||
|  |     } | ||
|  |          | ||
|  |     HeaderFilter::~HeaderFilter() | ||
|  |     { | ||
|  |         delete d; | ||
|  |     } | ||
|  |     \endcode | ||
|  |             | ||
|  |     The \bold {findAll()} method is further modified to create a progress bar popup the bar while searching | ||
|  |     is going on. | ||
|  |     \code | ||
|  |     void HeaderFilter::findAll(const QString &text,QTextDocument::FindFlags findFlags) | ||
|  |     { | ||
|  |         ... | ||
|  |         ... | ||
|  |         ... | ||
|  |          | ||
|  |         //The "progress" is the instance of FutureProgress class. | ||
|  |         //The "progress" is the pointer to the progress bar created  | ||
|  |         //Creates and shows the "progress" bar for searching task. | ||
|  |         Core::FutureProgress *progress =  | ||
|  |                 Core::ICore::instance()->progressManager()->addTask(d->watcher.future(), | ||
|  |                                                                    "MySearch", | ||
|  |                                                                     Find::Constants::TASK_SEARCH, | ||
|  |                                                                     Core::ProgressManager::KeepOnFinish | ||
|  |                                                                     ); | ||
|  |                                                                              | ||
|  |         progress->setWidget(createProgressWidget()); | ||
|  |         connect(progress, SIGNAL(clicked()), d->searchResultWindow(), SLOT(popup())); | ||
|  |     } | ||
|  |     \endcode | ||
|  | 
 | ||
|  |     The \bold {createProgressWidget()} function creates the progress widget.It shows | ||
|  |     the number of searched items found below and is placed below the progress bar. | ||
|  |     \code | ||
|  |     QWidget *HeaderFilter::createProgressWidget() | ||
|  |     { | ||
|  |         d->resultLabel = new QLabel; | ||
|  |         d->resultLabel->setAlignment(Qt::AlignCenter); | ||
|  |         QFont f = d->resultLabel->font(); | ||
|  |         f.setBold(true); | ||
|  |         f.setPointSizeF(StyleHelper::sidebarFontSize()); | ||
|  |         d->resultLabel->setFont(f); | ||
|  |         d->resultLabel->setPalette(StyleHelper::sidebarFontPalette(d->resultLabel->palette())); | ||
|  |         d->resultLabel->setText(tr("%1 found").arg(d->searchResultWindow()->numberOfResults())); | ||
|  |         return d->resultLabel; | ||
|  |     } | ||
|  |     \endcode | ||
|  |       | ||
|  |     \section2 Step 3.Testing the plugin.        | ||
|  |     Now its the time to test the plugin. For searching we use our "HeaderFilter" and the searched result is shown in the | ||
|  |     "Search Results" window and the progress bar pops up while searching. | ||
|  |      | ||
|  |     \inlineimage qtc-searchprogress-11.png | ||
|  |    | ||
|  | */ |