Qt - Ciągłe wykonywanie funkcji.

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ć.

0

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

0

prawdopodobnie potrzebujesz tego

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ę.

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.

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.

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ć.

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?

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.

0

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

0

Coś mi nie idzie ;/

zrobił coś takiego:

MainWindow.cpp:

#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..

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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1