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ć.
Opisz dokładniej co chcesz uzyskać,po co ci ciągłe wywoływanie tej funkcji itd.
prawdopodobnie potrzebujesz tego
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ę.
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.
@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.
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ć.
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?
@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.
W slocie podpiętym do sygnału clicked() buttona dajesz timer.start(ile_ms) i tyle
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..
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.
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.