Qt - Ciągłe wykonywanie funkcji.

Qt - Ciągłe wykonywanie funkcji.
L0
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
co mogę zrobić aby jakaś funkcja, np. licząca czas, była ciągle (od momentu wciśnięcia buttona) wykonywana w programie.
W Qt pętla główna jest gdzieś zaszyta, więc nie mam pojęcia w jaki sposób coś takiego wykonać,
dlatego byłbym wdzięczny aby ktoś mi pomógł coś takiego zrobić.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

Opisz dokładniej co chcesz uzyskać,po co ci ciągłe wywoływanie tej funkcji itd.

  • Rejestracja: dni
  • Ostatnio: dni
0

prawdopodobnie potrzebujesz tego

L0
  • Rejestracja: dni
  • Ostatnio: dni
0
MasterBLB napisał(a)

Opisz dokładniej co chcesz uzyskać,po co ci ciągłe wywoływanie tej funkcji itd.

Chcę aby od momentu wciśnięcia buttona pewne informacje były zapisywane do tablicy.

@qtmaster
zaraz sprawdzę.

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Stwórz klasę która dziedziczy po QThread i przeciąż w niej funkcje run(), niech ona zapisuje te dane do tablicy, a następnie po kliknięciu ów buttona wywołaj funkcję start() dla twojej klasy.

tomepaw
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Lublin
  • Postów: 218
0

@mto9: przecież metoda run() wykonuje się tylko przy starcie wątku, chyba, że źle zrozumiałem z dokumentacji ;)

Co do tematu: poczytaj o QTimer i sygnałach/slotach.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
1

Proponowani początkującemu QThread to jak dawanie dziecku brzytwy.
Najprostsze dla niego rozwiązanie to QTimer.

Zamiast wątków jest jeszcze coś takiego jak http://developer.qt.nokia.com/doc/qt-4.8/threads-qtconcurrent.html prostsze w użyciu i możliwe, że to jest mu potrzebne. Bez konkretów trudno powiedzieć.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0
ly000 napisał(a)

Chcę aby od momentu wciśnięcia buttona pewne informacje były zapisywane do tablicy.

@qtmaster
zaraz sprawdzę.

Skąd te dane miałyby się brać?Co jaki czas zapis ma mieć miejsce?

L0
  • Rejestracja: dni
  • Ostatnio: dni
0

@tomepaw
Dzięki, o coś takiego mi chodziło, tylko czy mógłbyś podać przykład (jeżeli się da) zapętlania tego?
Oraz aby zaczynało odliczać tylko po wciśnięciu buttona?
Troszkę tego nie ogarniam, ciągle wyskakuje windowsowski błąd z raportem.

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

W slocie podpiętym do sygnału clicked() buttona dajesz timer.start(ile_ms) i tyle

L0
  • Rejestracja: dni
  • Ostatnio: dni
0

Coś mi nie idzie ;/

zrobił coś takiego:

MainWindow.cpp:

Kopiuj
#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    licz = 50;
    odl = false;
    ui->setupUi(this);
    connect(ui->N_start, SIGNAL(clicked()), SLOT(odliczaj()));

    QTimer *timer = new QTimer(this);

    connect(timer, SIGNAL(timeout()), this, SLOT(open()));
}


void MainWindow::odliczaj()
{


przel = true;

if(odl == false && przel == true)
{

     timer->start(1000);
    odl = true;
    przel = false;
    ui->N_start->setText("Zacznij");
}

if(odl == true && przel == true)
{
    timer->stop();
    odl = false;
    przel = false;
    ui->N_start->setText("Przestan");
}


}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::open()
{
licz++;
ui->N_lcd->display(licz);

}

I gdy nacisnę buttona pojawia się ten error z raportem błędów programu..

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

Odpal program spod IDE w trybie debug,bez break pointów i kiedy się wysypie będziesz od razu widział,w którym miejscu.Tak patrząc po kodzie to inkrementacja licz++ w pewnym momencie może ci się przekręcić do 0 albo liczb ujemnych w zależności od tego,czy zdefiniowałeś jako unsigned.

L0
  • Rejestracja: dni
  • Ostatnio: dni
0

Okey, dzięki, napisałem to trochę w inny sposób i już działa.
I jeszcze raz dziękuje dla wszystkich, którym się chciało mi pomóc.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.