Название: Диалог ожидания
Отправлено: pish_r от Августа 09, 2005, 00:26
Нужна альтернатива QProgressDialog, но для случаев. когда количество итераций неизвестно(однако достаточно велико), но нужно давать юзеру понять что приложение не висит. Может что то типа виндузного диалога с вращающимся увеличительным стеклом вокруг монитора. Чтоб юзать можно было где то так: QWaitDialog dlg("wait,please");//Сфантазированный класс while(действите.isEnd()){ if(dlg.isCanceled()){ breack; } //Че-то делаем }
Если есть у кого подобный класс поделитесь, а то я третий год без отпуска ,а на улице лето, и мозгой вертеть совсем тяжко
Название: Диалог ожидания
Отправлено: Hellenna от Августа 09, 2005, 09:37
Пользуйся наздоровье. В форме полосочка бегает туда-сюда. ProcessForm.ui.h #include <qcanvas.h> #include <qtimer.h> #include <qrect.h>
//QCanvas *canvas; QTimer *timer; int frm_x; int frm_y; //QRect *rect;
void ProgressForm::init() { int pw_mid=parentWidget()->width()/2; int ph_mid=parentWidget()->height()/2; int w_mid=width()/2; int h_mid=height()/2; setGeometry ( pw_mid-w_mid, ph_mid-h_mid, width(), height() ); QRect rect1 (frmProcess->frameRect()); frm_x=rect1.x(); frm_y=rect1.y(); timer = new QTimer( this); connect( timer, SIGNAL(timeout()), SLOT(paintProcess()) ); //timer->start( 100, false ); setFixedSize(size()); btnCancel->hide(); textLabel1->hide(); }
void ProgressForm::paintProcess() { QRect canvas_rect (frmCanvas->frameRect()); int canvas_right=canvas_rect.right(); if(frm_x>=canvas_right) { frm_x=canvas_rect.x(); } else frm_x=frm_x+5; frmProcess->move(frm_x, frm_y); frmProcess->repaint(); }
void ProgressForm::btnCancel_clicked() { emit killProcess(); //reject(); }
void ProgressForm::setText( QString text ) { lblProcess->setText(text); }
void ProgressForm::hideForm() { timer->stop(); hide(); }
void ProgressForm::showForm() { timer->start( 100, false ); show(); }
ProcessForm.ui <!DOCTYPE UI><UI version="3.1" stdsetdef="1"> <class>ProgressForm</class> <widget class="QDialog"> <property name="name"> <cstring>ProgressForm</cstring> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>468</width> <height>135</height> </rect> </property> <property name="backgroundOrigin"> <enum>WidgetOrigin</enum> </property> <property name="caption"> <string>Progress...</string> </property> <property name="modal" stdset="0"> <bool>true</bool> </property> <grid> <property name="name"> <cstring>unnamed</cstring> </property> <widget class="QLayoutWidget" row="0" column="0"> <property name="name"> <cstring>layout4</cstring> </property> <vbox> <property name="name"> <cstring>unnamed</cstring> </property> <widget class="QLabel"> <property name="name"> <cstring>lblProcess</cstring> </property> <property name="text"> <string><type of the process></string> </property> <property name="alignment"> <set>WordBreak|AlignVCenter</set> </property> </widget> <widget class="QFrame"> <property name="name"> <cstring>frmCanvas</cstring> </property> <property name="sizePolicy"> <sizepolicy> <hsizetype>1</hsizetype> <vsizetype>0</vsizetype> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="minimumSize"> <size> <width>100</width> <height>20</height> </size> </property> <property name="paletteForegroundColor"> <color> <red>81</red> <green>89</green> <blue>125</blue> </color> </property> <property name="frameShape"> <enum>GroupBoxPanel</enum> </property> <property name="frameShadow"> <enum>Plain</enum> </property> <property name="lineWidth"> <number>1</number> </property> <widget class="QFrame"> <property name="name"> <cstring>frmProcess</cstring> </property> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>60</width> <height>20</height> </rect> </property> <property name="sizePolicy"> <sizepolicy> <hsizetype>0</hsizetype> <vsizetype>0</vsizetype> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="minimumSize"> <size> <width>30</width> <height>20</height> </size> </property> <property name="paletteForegroundColor"> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> </property> <property name="paletteBackgroundColor"> <color> <red>165</red> <green>180</green> <blue>255</blue> </color> </property> <property name="palette"> <palette> <active> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>129</red> <green>140</green> <blue>199</blue> </color> <color> <red>208</red> <green>215</green> <blue>255</blue> </color> <color> <red>168</red> <green>177</green> <blue>227</blue> </color> <color> <red>64</red> <green>69</green> <blue>99</blue> </color> <color> <red>85</red> <green>92</green> <blue>132</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>165</red> <green>180</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>0</red> <green>0</green> <blue>128</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> </active> <disabled> <color> <red>128</red> <green>128</green> <blue>128</blue> </color> <color> <red>129</red> <green>140</green> <blue>199</blue> </color> <color> <red>208</red> <green>215</green> <blue>255</blue> </color> <color> <red>148</red> <green>160</green> <blue>228</blue> </color> <color> <red>64</red> <green>69</green> <blue>99</blue> </color> <color> <red>85</red> <green>92</green> <blue>132</blue> </color> <color> <red>128</red> <green>128</green> <blue>128</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>128</red> <green>128</green> <blue>128</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>165</red> <green>180</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>0</red> <green>0</green> <blue>128</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>192</blue> </color> <color> <red>128</red> <green>0</green> <blue>128</blue> </color> </disabled> <inactive> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>129</red> <green>140</green> <blue>199</blue> </color> <color> <red>208</red> <green>215</green> <blue>255</blue> </color> <color> <red>148</red> <green>160</green> <blue>228</blue> </color> <color> <red>64</red> <green>69</green> <blue>99</blue> </color> <color> <red>85</red> <green>92</green> <blue>132</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>165</red> <green>180</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>0</blue> </color> <color> <red>0</red> <green>0</green> <blue>128</blue> </color> <color> <red>255</red> <green>255</green> <blue>255</blue> </color> <color> <red>0</red> <green>0</green> <blue>192</blue> </color> <color> <red>128</red> <green>0</green> <blue>128</blue> </color> </inactive> </palette> </property> <property name="frameShape"> <enum>StyledPanel</enum> </property> <property name="frameShadow"> <enum>Raised</enum> </property> <property name="lineWidth"> <number>4</number> </property> <property name="margin"> <number>0</number> </property> <property name="midLineWidth"> <number>2</number> </property> </widget> </widget> <widget class="QLabel"> <property name="name"> <cstring>textLabel1</cstring> </property> <property name="text"> <string><font size="-1"><b>Note:</b> killing the process may cause the unexpected results</font></string> </property> </widget> <widget class="QLayoutWidget"> <property name="name"> <cstring>layout65</cstring> </property> <hbox> <property name="name"> <cstring>unnamed</cstring> </property> <spacer> <property name="name"> <cstring>spacer26</cstring> </property> <property name="orientation"> <enum>Horizontal</enum> </property> <property name="sizeType"> <enum>Expanding</enum> </property> <property name="sizeHint"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> <widget class="QPushButton"> <property name="name"> <cstring>btnCancel</cstring> </property> <property name="text"> <string>Kill process</string> </property> <property name="iconSet"> <iconset></iconset> </property> </widget> <spacer> <property name="name"> <cstring>spacer27</cstring> </property> <property name="orientation"> <enum>Horizontal</enum> </property> <property name="sizeType"> <enum>Expanding</enum> </property> <property name="sizeHint"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </hbox> </widget> </vbox> </widget> </grid> </widget> <connections> <connection> <sender>btnCancel</sender> <signal>clicked()</signal> <receiver>ProgressForm</receiver> <slot>btnCancel_clicked()</slot> </connection> </connections> <includes> <include location="local" impldecl="in implementation">ProgressForm.ui.h</include> </includes> <signals> <signal>killProcess()</signal> </signals> <slots> <slot>paintProcess()</slot> <slot>btnCancel_clicked()</slot> <slot>hideForm()</slot> <slot>showForm()</slot> </slots> <functions> <function access="private" specifier="non virtual">init()</function> <function>setText( QString text )</function> </functions> <pixmapinproject/> <layoutdefaults spacing="6" margin="11"/> </UI>
Когда надо выполнять какое-либо длинное действие просто показываешь пользователю диалог, делаешь действие, переодически вызываея qApp->processEvents{}, когда действие закончилось диалог прячешь.
Название: Диалог ожидания
Отправлено: pish_r от Августа 09, 2005, 10:01
Большое Вам человеческое спасибо!
Название: Диалог ожидания
Отправлено: Hellenna от Августа 09, 2005, 14:15
Большое пожалуйста! :D
Название: Диалог ожидания
Отправлено: Hellenna от Августа 09, 2005, 14:18
Большое пожалуйста! :D
Название: Диалог ожидания
Отправлено: Zigmar от Августа 09, 2005, 20:26
Hellenna, так обычный QProgressBar это уже сам умеет, надо просто выставить totalSteps в 0 и менять progress. If the total is given as 0 the progress bar shows a busy indicator instead of a percentage of steps. This is useful, for example, when using QFtp or QHttp to download items when they are unable to determine the size of the item being downloaded.
Название: Диалог ожидания
Отправлено: Hellenna от Августа 10, 2005, 08:53
Может быть это появилось в последних версиях... когда я смотрела не было, или плохо смотрела... :roll: В любом случае, спасибо. теперь буду знать.
Название: Диалог ожидания
Отправлено: pish_r от Августа 10, 2005, 12:56
не ссортесь, мне предложенный диалог очень подошел
Название: Re: Диалог ожидания
Отправлено: kn0pka от Апреля 05, 2009, 13:30
Zigmar, только сейчас это уже немного по-другому делается. Надо minimum и maximum установить в 0.
|