QT-> funkcja sterujaca progress Bar'em

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
patlas
Sędziwy Jeż
Sędziwy Jeż
Posty: 42
Rejestracja: 23 maja 2008, 10:53
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

QT-> funkcja sterujaca progress Bar'em

Post autor: patlas »

Witam :)
Jak wcześniej powiedziałem uczę się programować w c++ :) Niby wszystko ładnie idzie ale jak chce cos dopisać do programu w QT to mam problemy :(
Mianowicie chodzi o napisanie funkcji która będzie zmieniała wartość paska postępu przy przciśnieciu przycisku (ma następować inkrementacja );
Tak wygląda cała klasa + moja funkcja rise():

Kod: Zaznacz cały


#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QHeaderView>
#include <QtGui/QProgressBar>
#include <QtGui/QPushButton>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_WidgetClass
{
public:
    QProgressBar *progressBar;
    QPushButton *pushButton;
    int increment(int v);
    void rise(void);
    void setupUi(QWidget *WidgetClass)
    {
        if (WidgetClass->objectName().isEmpty())
            WidgetClass->setObjectName(QString::fromUtf8("WidgetClass"));
        WidgetClass->resize(371, 192);
        progressBar = new QProgressBar(WidgetClass);
        progressBar->setObjectName(QString::fromUtf8("progressBar"));
        progressBar->setGeometry(QRect(10, 10, 351, 61));
        progressBar->setValue(24);
        pushButton = new QPushButton(WidgetClass);
        pushButton->setObjectName(QString::fromUtf8("pushButton"));
        pushButton->setGeometry(QRect(110, 130, 92, 28));
        rise();
        retranslateUi(WidgetClass);

        QMetaObject::connectSlotsByName(WidgetClass);
    } // setupUi

    void retranslateUi(QWidget *WidgetClass)
    {
        WidgetClass->setWindowTitle(QApplication::translate("WidgetClass", "Widget", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("WidgetClass", "PushButton", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(WidgetClass);
    } // retranslateUi

};

/////////////////////////////////////////////////////////////////////////////MOJE FUNKCJE
int Ui_WidgetClass::increment(int v)
{
    return v++;
}
void Ui_WidgetClass::rise(void)
{
    int value=3;
    while(value<100)
    {
        progressBar->setValue(value);
        //QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(increment(&value))); <- CO ZROBIĆ W TYM MIEJSCU :?:
    }
}
Prosiłbym o pomoc w rozwiazaniu tego problemu oraz mam drugie pytanie:) Gdzie musze wywołać funkcje składową klasy aby ją odpalić :?: W mainie wyrzuca że funkcja nie rozpoznana a nie chce jej odpalać tuż pod deklaracją klasy :(
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: QT-> funkcja sterujaca progress Bar'em

Post autor: adrian5632 »

Y... Czy mi się zdaje, czy ty modyfikujesz wygenerowany plik z GUI designera? Jeśli tak, to w ten sposób na pewno wiele nie zdziałasz - przy każdej aktualizacji interfejsu wszystko, co napisałeś zostanie usunięte. Ty musisz dziedziczyć po wygenerowanej klasie, a nie modyfikować ją bezpośrednio.
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
patlas
Sędziwy Jeż
Sędziwy Jeż
Posty: 42
Rejestracja: 23 maja 2008, 10:53
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: QT-> funkcja sterujaca progress Bar'em

Post autor: patlas »

Faktycznie modyfikowałem generowane pliki :( Mój błąd :(
Ale teraz troche inaczej próbuje rozwiazać problem (pisząc swój kod w gedit i komilujac go) i mam problem przy slotach i sygnałach :( Niestety nigdzie nie moge znaleźć łopatologicznego wytłumaczenia ich pisania :(

Opis problemu:

W kodzie mam obiekt QProgressBar i chce modyfikować jego wartość za pomocą przycisku QPushButton (zwykła inkrementacja wartośći). Moj kot wygląda tak:

Kod: Zaznacz cały

class mojaWidgeta : public QWidget
{
 Q_OBJECT
 public:
 mojaWidgeta(QWidget *p = 0);
};


 mojaWidgeta::mojaWidgeta(QWidget *p) : QWidget(p)
 {
  QPushButton *pushButton;
  QPushButton *pushButton_2;
  QProgressBar *progressBar;


  pushButton  = new QPushButton(tr("++"));
  pushButton_2 = new QPushButton(tr("--"));
  progressBar = new QProgressBar(this);
  progressBar->setValue(20);
  connect(pushButton, SIGNAL(pressed()), progressBar, SLOT(setValue(10)));  ///<- tutaj zmiana 
wartości na określoną/ wywołanie wlasnej funkcji z inkrementacją :)

  QVBoxLayout *layout = new QVBoxLayout();
  layout->addWidget(pushButton);
  layout->addWidget(progressBar);
  layout->addWidget(pushButton_2);
  setLayout(layout);
}

int main(int argc , char *argv[])
{
     QApplication aplikacja(argc, argv);
     mojaWidgeta Widgeta;
     Widgeta.show();
     return aplikacja.exec();
}

adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: QT-> funkcja sterujaca progress Bar'em

Post autor: adrian5632 »

http://adrian5632.blogspot.com/2008/12/ ... w-c-z.html

Nie możesz podawać wartości, gdy łączysz sygnały/sloty - musisz podać samą sygnaturę sygnału/slotu. Trochę się porywasz motyką na słońce - proponuję zainteresować się QtCreatorem - tam możesz wyklikać nowe sloty.
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości