Russian Qt Forum
Май 10, 2024, 11:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Диалог ожидания  (Прочитано 7509 раз)
pish_r
Гость
« : Август 09, 2005, 00:26 »

Нужна альтернатива QProgressDialog, но для случаев. когда количество итераций неизвестно(однако достаточно велико), но нужно давать юзеру понять что приложение не висит. Может что то типа виндузного диалога с вращающимся увеличительным стеклом вокруг монитора. Чтоб юзать можно было где то так:
Код:

QWaitDialog dlg("wait,please");//Сфантазированный класс
while(действите.isEnd()){
if(dlg.isCanceled()){
breack;
}
//Че-то делаем
}

Если есть у кого подобный класс поделитесь, а то я третий год без отпуска ,а на улице лето, и мозгой вертеть совсем тяжко
Записан
Hellenna
Гость
« Ответ #1 : Август 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>&lt;type of the process&gt;</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>&lt;font size="-1"&gt;&lt;b&gt;Note:&lt;/b&gt; killing the process may cause the unexpected results&lt;/font&gt;</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
Гость
« Ответ #2 : Август 09, 2005, 10:01 »

Большое Вам человеческое спасибо!
Записан
Hellenna
Гость
« Ответ #3 : Август 09, 2005, 14:15 »

Большое пожалуйста! Веселый
Записан
Hellenna
Гость
« Ответ #4 : Август 09, 2005, 14:18 »

Большое пожалуйста!  Веселый
Записан
Zigmar
Гость
« Ответ #5 : Август 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
Гость
« Ответ #6 : Август 10, 2005, 08:53 »

Может быть это появилось в последних версиях... когда я смотрела не было, или плохо смотрела... :roll: В любом случае, спасибо. теперь буду знать.
Записан
pish_r
Гость
« Ответ #7 : Август 10, 2005, 12:56 »

не ссортесь, мне предложенный диалог очень подошел
Записан
kn0pka
Гость
« Ответ #8 : Апрель 05, 2009, 13:30 »

Zigmar, только сейчас это уже немного по-другому делается. Надо minimum и maximum установить в 0.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.098 секунд. Запросов: 21.