صدا زدن QTimer از داخل تابع و هنگ کردن برنامه - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

صدا زدن QTimer از داخل تابع و هنگ کردن برنامه

0 امتیاز

سلام من کد زیر رو دارم

#ifndef CONSOLEWIDGET_H
#define CONSOLEWIDGET_H

#include <QWidget>
#include <QTimer>

namespace Ui {
class ConsoleWidget;
}

class ConsoleWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ConsoleWidget(QWidget *parent = 0);
    ConsoleWidget& operator <<(QString text);
    ConsoleWidget& operator <<(const char* text);
    ~ConsoleWidget();

private:
    Ui::ConsoleWidget *ui;
    QTimer timer;
    QStringList buffer;

private slots:
    void refreshWindow();

};

#endif // CONSOLEWIDGET_H

 

#include "consolewidget.h"
#include "ui_consolewidget.h"

ConsoleWidget::ConsoleWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ConsoleWidget)
{
    ui->setupUi(this);
    ui->textBrowser->setFont(QFont("Tahoma",10,5));
    ui->textBrowser->setStyleSheet("background-color: rgb(0, 0, 0);"
                                   "color: rgb(255, 255, 255);");
    connect(&timer,SIGNAL(timeout()),this,SLOT(refreshWindow()));
}

ConsoleWidget& ConsoleWidget::operator <<(QString text)
{
    buffer.push_back(text);
    timer.start(30);
    return *this;
}

ConsoleWidget& ConsoleWidget::operator <<(const char *text)
{
    buffer.push_back(QString(text));
    timer.start(30);
    return *this;
}

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

void ConsoleWidget::refreshWindow()
{
    QString text=ui->textBrowser->toPlainText();
    for(int i=0;i<buffer.size();i++)
        text += buffer[i];
    ui->textBrowser->setText(text);
    buffer.clear();
}

 

من از داخل یک فایل دیگه اینو که به این شکل استفاده می کنم برنامم هنگ می کنه . مشکلش چیه ؟

for(int i=0;i<100;i++)
         consoleWidget<<QString("test")<<"\n";
سوال شده بهمن 15, 1392  بوسیله ی Xavi (امتیاز 627)   24 83 110
دوباره تگ گذاری شد بهمن 15, 1392 بوسیله ی BlueBlade

1 پاسخ

+1 امتیاز

کدت رو به این شکل عوض کردم به نظر میرسه درست کار می کنه الان :

#include "consolewidget.h"
#include "ui_consolewidget.h"

ConsoleWidget::ConsoleWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ConsoleWidget)
{
    ui->setupUi(this);
    ui->textBrowser->setFont(QFont("Tahoma",10,5));
    ui->textBrowser->setStyleSheet("background-color: rgb(0, 0, 0);"
                                   "color: rgb(255, 255, 255);");
}

ConsoleWidget& ConsoleWidget::operator <<(QString text)
{
    buffer.push_back(text);
    timer.start(30);
    connect(&timer,SIGNAL(timeout()),this,SLOT(refreshWindow()));
    return *this;
}

ConsoleWidget& ConsoleWidget::operator <<(const char *text)
{
    buffer.push_back(QString(text));
    timer.start(30);
    connect(&timer,SIGNAL(timeout()),this,SLOT(refreshWindow()));
    return *this;
}

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

void ConsoleWidget::refreshWindow()
{
    timer.disconnect();
    QString text=ui->textBrowser->toPlainText();

    for(int i=0;i<buffer.size();i++)
        text += buffer[i];

    ui->textBrowser->setText(text);
    buffer.clear();
}

 

پاسخ داده شده بهمن 16, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده بهمن 16, 1392 بوسیله ی BlueBlade
...