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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: "пробег" по всем флажкам  (Прочитано 3290 раз)
k2rush
Гость
« : Май 25, 2012, 17:35 »

Имеем такой виджет.
Сверху находится надпись1, чуть ниже прогресс бар, Ещё ниже лист с 5-ю значениями, которые checkable, и ниже всего этого безобразия кнопка "выполнить". При нажатии на кнопку, в надпись1 появляется значение из листа, которое было checked ну и прогресс бар ползёт, выполняется и переходит на следующую выделенную надпись и так до конца.(вроди нормально объяснил) Ну то есть как при любой установке.

Что я делаю.
Связываю кнопку с таймером, тамер со слотом который делает простую иттерацию, иттеративное значение с прогрусс баром.
Так вот, я пытаюсь использовать только один счётчик(не знаю верно или нет).
На иттеративную функцию вещаю условие, что если какое либо из из значений листа включенно, нужная надпись в надпись1, становится видимой, а по загрузке прогрусс бара так же становится невидимой(тут уже совсем не понятно, кодом дополню)

Проблем по моиму тут тьма, но самая явная, то что счётчик запускается в любом случае при нажатии кнопки, даже если выделенных элементов нет. ПРи попытке же выделить эти элементы сразу начинается загрузка прогресс бара, без нажатия кнопки. Пробывал вещать ограничения на счётчик, что он работает только при наличии включенных элементов, но н выходит((

Код
.h
Код:
public:
    Prep(QWidget *parent =0);
    QTimer *timer;

    QListWidgetItem *ListItem;
    QListWidgetItem *ListItem1;
    QListWidgetItem *ListItem2;
    QListWidgetItem *ListItem3;
    QListWidgetItem *ListItem4;
    int as;

private:
    int A;


public slots:
    void plus1();

    void itemClicked(QTreeWidgetItem *item, int column);

signals:
    void counterChanged(int);

.cpp
Код:
    setupUi(this);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));

    QLCDNumber *lcd = new QLCDNumber(2);
    lcd->show();

    timer = new QTimer(this);

    A=0;

    timer->setInterval(35);
    as=0;
    progressBar->setValue(as);

    label_15->hide();
    label_16->hide();
    label_17->hide();
    label_18->hide();






    connect(timer, SIGNAL(timeout()), this, SLOT(plus1()));

    connect(this, SIGNAL(counterChanged(int)),
            progressBar, SLOT(setValue(int)));

    connect(this, SIGNAL(counterChanged(int)),
            lcd, SLOT(display(int)));


    QTreeWidgetItem *TreeItem = new QTreeWidgetItem(treeWidget);
    TreeItem->setText(0, tr("Станция"));
    TreeItem->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem1 = new QTreeWidgetItem(TreeItem);
    TreeItem1->setText(0, tr("РП-330Б-РМ1(1)"));
    TreeItem1->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem2 = new QTreeWidgetItem(TreeItem);
    TreeItem2->setText(0, tr("РП-330Б-РМ1(2)"));
    TreeItem2->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem3 = new QTreeWidgetItem(TreeItem);
    TreeItem3->setText(0, tr("АП ДС1.2"));
    TreeItem3->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem4 = new QTreeWidgetItem(TreeItem);
    TreeItem4->setText(0, tr("УС14.1"));
    TreeItem4->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem5 = new QTreeWidgetItem(TreeItem);
    TreeItem5->setText(0, tr("КС-100"));
    TreeItem5->setIcon(0, QIcon(":/images/gray.bmp"));
    QTreeWidgetItem *TreeItem6 = new QTreeWidgetItem(TreeItem);
    TreeItem6->setText(0, tr("AR5000"));
    TreeItem6->setIcon(0, QIcon(":/images/gray.bmp"));

    connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
            tab, SLOT(showNormal()));

    ListItem = new QListWidgetItem(listWidget_5);
    ListItem->setText(tr("Загрузить"));
    ListItem->setCheckState(Qt::Unchecked);

    ListItem1 = new QListWidgetItem(listWidget_5);
    ListItem1->setText(tr("Калибровать"));
    ListItem1->setCheckState(Qt::Unchecked);

    ListItem2 = new QListWidgetItem(listWidget_5);
    ListItem2->setText(tr("Загрузить блок БВ-УПСБ"));
    ListItem2->setCheckState(Qt::Unchecked);

    ListItem3 = new QListWidgetItem(listWidget_5);
    ListItem3->setText(tr("Провести тест"));
    ListItem3->setCheckState(Qt::Unchecked);

    ListItem4 = new QListWidgetItem(listWidget_5);
    ListItem4->setText(tr("Включить в конфиг"));
    ListItem4->setCheckState(Qt::Unchecked);

    if((ListItem->checkState()==Qt::Checked))// || (ListItem1->checkState()==Qt::Checked) || (ListItem2->checkState()==Qt::Checked) || (ListItem3->checkState()==Qt::Checked) || (ListItem4->checkState()==Qt::Checked))
    {
       // connect(pushButton, SIGNAL(clicked()),
         //       timer, SLOT(start()));


    }







}



void Prep::plus1()
{

    if(as==99)
    {


        if (A==1)
        {
         as=0;
         emit counterChanged(as);

         label_16->hide();
         ListItem->setCheckState(Qt::Unchecked);

        }
        if (A==2)
        {
         as=0;
         emit counterChanged(as);
         //timer->stop();
         label_15->hide();

        }




    }
    else{
        if(ListItem->checkState()==Qt::Checked)

        {
        label_15->show();
         emit counterChanged(++as);
        A=1;
        }
        if(ListItem->checkState()==Qt::Checked)

        {
            label_16->show();
            emit counterChanged(++as);
           A=2;
        }
        }
}
   
Записан
k2rush
Гость
« Ответ #1 : Май 26, 2012, 12:03 »


Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Май 26, 2012, 14:16 »

При чем тут "алгоритмы" и где ты тут увидел кучу проблем?
mainwindow.h
Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
class QListWidgetItem;
class Qtimer;
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
   explicit MainWindow(QWidget *parent = 0);
   ~MainWindow();
 
signals:
   void progressBarEndReached();
 
private slots:
   void on_pushButton_clicked();
   void onTimer();
   void onProgressBarEndReached();
 
 
private:
   Ui::MainWindow *ui;
   QTimer* timer;
   int current;
   bool chkBoxIsChecked;
};
 
#endif // MAINWINDOW_H
 

mainwindow.cpp
Код
C++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   ui->label->setText(QString());
   ui->progressBar->setEnabled(true);
   timer = new QTimer(this);
   timer->setInterval(20);
   connect(timer, SIGNAL(timeout()),this, SLOT(onTimer()));
   connect(this, SIGNAL(progressBarEndReached()), this, SLOT(onProgressBarEndReached()));
   QStringList names, topView;
   names << trUtf8("Загрузить")
         << trUtf8("Калибровать")
         << trUtf8("Загрузить блок БВ-УПСБ")
         << trUtf8("Провести тест")
         << trUtf8("Включить в конфиг");
 
   topView << trUtf8("Загрузка")
           << trUtf8("Калибровка")
           << trUtf8("Загрузка блока БВ-УПСБ")
           << trUtf8("Проведение теста")
           << trUtf8("Включение в конфиг");
   for (int i = 0; i < names.count(); ++i)
   {
       QListWidgetItem *item = new QListWidgetItem(names.at(i));
       item->setCheckState(Qt::Unchecked);
       item->setData(Qt::UserRole, topView.at(i));
       ui->listWidget->addItem(item);
   }
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
void MainWindow::on_pushButton_clicked()
{
   current = 0;
   ui->pushButton->setEnabled(false);
   chkBoxIsChecked = false;
   emit progressBarEndReached();
 
}
 
void MainWindow::onTimer()
{
   int value = ui->progressBar->value();
   if (value >= ui->progressBar->maximum())
   {
       emit progressBarEndReached();
       return;
   }
   ui->progressBar->setValue(value + 1);
}
 
void MainWindow::onProgressBarEndReached()
{
   if (timer->isActive())
       timer->stop();
   while (true){
       if (current >= ui->listWidget->count())
       {
           chkBoxIsChecked ? QMessageBox::information(this, trUtf8("Внимание!"), trUtf8("Работа выполнена")) :
                             QMessageBox::information(this, trUtf8("Внимание!"), trUtf8("Не отмечено ни одного условия"));
           timer->stop();
           ui->pushButton->setEnabled(true);
           ui->label->setText(QString());
           ui->progressBar->setValue(0);
           return;
       }
       if (ui->listWidget->item(current)->checkState() == Qt::Checked)
       {
           chkBoxIsChecked = true;
           ui->label->setText(ui->listWidget->item(current)->data(Qt::UserRole).toString());
           ui->progressBar->setValue(0);
           ++current;
           timer->start();
           return;
       }
       ++current;
   }
}
 
« Последнее редактирование: Май 26, 2012, 14:31 от Kurles » Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
k2rush
Гость
« Ответ #3 : Май 26, 2012, 20:02 »

Спасибо за грамотный ответ, но к этому времени я уже кое как сам сделал.
Оцените.

Правда в первый раз пробег прогресс бара идёт в 4 раза быстрей чем в последнем
Код
C++ (Qt)
void Prep::plus1()
{
 
 
 
   if (ListItem->checkState()==Qt::Checked)
   {
   if (as>95)
   {
       label_15->hide();
       as=0;
       emit counterChanged(as);
       ListItem->setCheckState(Qt::Unchecked);
 
   }
   else
   {
       label_15->show();
 
       emit counterChanged(++as);
 
   }
   }
   label2();
 
 
}
void Prep::label2()
{
   if (ListItem1->checkState()==Qt::Checked)
   {
   if (as>96)
   {
       label_16->hide();
       as=0;
       emit counterChanged(as);
       ListItem1->setCheckState(Qt::Unchecked);
 
   }
   else
   {
       if(((ListItem->checkState()==Qt::Unchecked)))
       label_16->show();
 
 
       emit counterChanged(++as);
 
   }
   }
   label3();
 
}
 
void Prep::label3()
{
   if (ListItem2->checkState()==Qt::Checked)
   {
   if (as>97)
   {
       label_17->hide();
       as=0;
       emit counterChanged(as);
       ListItem2->setCheckState(Qt::Unchecked);
 
   }
   else
   {
        if(((ListItem->checkState()==Qt::Unchecked)) && (ListItem1->checkState()==Qt::Unchecked))
       label_17->show();
 
       emit counterChanged(++as);
 
   }
}
   label4();
 
}
 
void Prep::label4()
{
   if (ListItem3->checkState()==Qt::Checked)
   {
   if (as>98)
   {
       label_18->hide();
       as=0;
       emit counterChanged(as);
       ListItem3->setCheckState(Qt::Unchecked);
 
   }
   else
   {
       if(((ListItem->checkState()==Qt::Unchecked)) && (ListItem1->checkState()==Qt::Unchecked) && (ListItem2->checkState()==Qt::Unchecked))
       label_18->show();
 
       emit counterChanged(++as);
 
   }
   }
   if(((ListItem->checkState()==Qt::Unchecked)) && (ListItem1->checkState()==Qt::Unchecked) && (ListItem2->checkState()==Qt::Unchecked) && (ListItem3->checkState()==Qt::Unchecked))
   timer->stop();
}
« Последнее редактирование: Май 26, 2012, 20:21 от k2rush » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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