Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.210.17] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Создал в Qt алгоритм сортировки, запускаемый QPushButton. При этом система подвисает секунд на 10. А хотелось бы чтобы не подвисала. В Visual Basic это реализуется через DoEvents(); Есть ли что-либо подобное в библиотеке Qt? Чтобы можно было удобно избежать подвисания. |
Сообщ.
#2
,
|
|
|
Смотри класс QEventLoop.
|
Сообщ.
#3
,
|
|
|
наверное, QApplication::processEvents()
а лучше - в отдельном потоке |
Сообщ.
#4
,
|
|
|
Спасибо, друзья! попробую поискать исходнички на эту тему...
|
Сообщ.
#5
,
|
|
|
Я реализовал это дело в своей проге так:
int main(int argc, char *argv[]) { QApplication app(argc, argv); CalculatorForm calculator(5,10,&app); calculator.show(); return app.exec(); } Короче говоря, передал экземпляру класса CalculatorForm ссылку на QApplication В конструкторе класса CalculatorForm сложил полученную ссылку в private переменную QApplication *qapp. простым приравниванием qapp=app; A затем вызвал по этой ссылке process events в теле функции быстрой сортировки (функция член класса): void CalculatorForm :: qsr(vector<ElementDbl> &item,int left,int right){ //register int i,j; ElementDbl x,y; i=left; j=right; vector<ElementDbl>::iterator pp; pp=item.begin(); x=pp[(left+right)/2]; //x.h[0]=3; do{ while(pp[i]<x && i<right)i++; while(x<pp[j] && j>left)j--; if(i<=j){ y=pp[i]; pp[i]=pp[j]; pp[j]=y; i++; j--;} }while(i<=j); qapp->processEvents(QEventLoop::ExcludeUserInputEvents); if(left<j)qsr(item,left,j); if(i<right)qsr(item,i,right); }; Добавлено Ребят, подскажите как лучше в алгоритме быстрой сортировки организовать бегущую строку? Добавлено ... в смысле чтобы показывало скока процентов выполнено. Алгоритм нелинейный. Поэтому сразу непоймёшь... |