Hirdetés

Aktív témák

  • csavar

    csendes tag

    Sziasztok!

    Alapvető problémám van a QT4 GUI programozással kapcsolatban. Most tanulom a qt4 programozást, Egyszerű programot szeretnék írni, ahol egy qthread-ból származó szál frissíti a GUI-t. Konkrétan egy progressbar-t értékét állítani a szál 100ms -ként.

    Áttúrtam az sdk doksit, a google-t de csak olyan példákat találtam ahol egy nyomógombot kapcsoltak össze valamihez.
    Nálam viszont egy háttérszálból gui elemet kellene frissíteni.

    Tud valaki egyszerű példát bemásolni (ahol csak a slotokat, signalokat, connecteket, fő elemeket tartalmaz) vagy jó tutorial linket? Mert nálam amit csináltam nem működik, hibával leáll a dolog futás közben

    Valami ilyesmire gondolok:

    class szal
    {
    void run();
    }

    class gui
    {
    MainWindow *ui; // Ez tartalmazza a progress bar-t

    }

    Hova kell slot-ot, signal-t connectet tenni?
    (Pédát leegyszerűsíttem persze..)

    Előre is köszönöm!!!!

  • csavar

    csendes tag

    Az is elég lenne ha valaki leírni hova kell slot-ot, signal-t és connectet tennem..

  • csavar

    csendes tag

    Na, kihagytam a Q_OBJECT makrót a workthread osztályból. Teljes kód (hátha valakinek jól jön. Persze ez csak "demo", nem törekedtem a teljességre. Ja, és QTCreatorral készítettem.)

    ****************
    mainwindow.h
    ****************

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QtGui/QMainWindow>
    #include "workthread.h"

    namespace Ui
    {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    MainWindow(QWidget *parent = 0);

    ~MainWindow();

    private:
    Ui::MainWindow *ui;
    class workThread *wt;

    private slots:
    void on_pushButton_clicked();
    public slots:
    void setProgressBarValue(int v);

    };

    #endif // MAINWINDOW_H

    *******************
    mainwindow.cpp
    *******************

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

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    wt = new workThread();

    QObject::connect(wt, SIGNAL(setValue(int)), this,
    SLOT(setProgressBarValue(int)));
    }

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

    void MainWindow::on_pushButton_clicked()
    {
    wt->start();

    }

    void MainWindow::setProgressBarValue(int v)
    {

    ui->progressBar->setValue(v);

    }

    ***************
    workthread.h
    ***************

    #ifndef WORKTHREAD_H
    #define WORKTHREAD_H

    #include <QThread>

    class workThread : public QThread
    {
    Q_OBJECT
    private:
    bool exit;
    int count;

    public:
    workThread();
    void run();
    void stop();
    signals:
    void setValue(int v);
    };

    #endif // WORKTHREAD_H

    ******************
    workthread.cpp
    ******************

    #include "workthread.h"

    workThread::workThread()
    {
    exit = false; count = 0;

    }

    void workThread::run()
    {
    while(!exit)
    {
    msleep(50);
    emit setValue(count);
    if (count >= 100)count = 0;
    else count++;
    }
    }

    void workThread::stop()
    {
    exit = true;
    }

    [ Szerkesztve ]

Aktív témák