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ć.
Qt - Ciągłe wykonywanie funkcji.
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1454
Opisz dokładniej co chcesz uzyskać,po co ci ciągłe wywoływanie tej funkcji itd.
- Rejestracja: dni
- Ostatnio: dni
prawdopodobnie potrzebujesz tego
- Rejestracja: dni
- Ostatnio: dni
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ę.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 380
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.
- Rejestracja: dni
- Ostatnio: dni
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ć.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1454
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?
- Rejestracja: dni
- Ostatnio: dni
@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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1454
W slocie podpiętym do sygnału clicked() buttona dajesz timer.start(ile_ms) i tyle
- Rejestracja: dni
- Ostatnio: dni
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..
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Warszawa
- Postów: 1454
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.
- Rejestracja: dni
- Ostatnio: dni
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.