2015-09-14 2 views
0

В настоящее время я работаю над Ubuntu 14.04, используя gcc 4.9.2 и Qwt 6.1.3; Я установил как Qt 4.8.6, так и Qt 5.2.1 (и мне интересно, может ли это быть связано с проблемами, которые я испытываю).Кривые обновления проблемы в QwtPlot 6.1.3

У меня есть простой графический интерфейс с QwtPlot и QwtPlotCurve, которые я пытаюсь обновить и перерисовать. В функции setupUi(), я создаю несколько точек случайных данных, а затем построить их:

void ExampleMainWindow::setupUi(QMainWindow* mainWindow) 
{ 
    // run the inherited setupUi 
    Ui_MainWindow::setupUi(mainWindow); 

    // associate internal pointer to main window 
    this->mainWindow = mainWindow; 

    // create some data points 
    for(unsigned int i = 0; i < 10; i++) 
    { 
      this->createDataPoint(); 
    } 

    for(unsigned int i = 0; i < this->xPlot.size(); i++) 
    { 
      cout << "Point #" << i << ": x=" << xPlot[i] << "; y=" << yPlot[i] << endl; 
    } 
    this->updateGraph(); 

    // also, connect stuff 
    connect(this->pushButton, SIGNAL(clicked()), this, SLOT(synchronous())); 

    return; 
} 

Теперь эта часть работает как положено. В результате получается нечто вроде этого:

enter image description here

Позже я подключил pushButton к способу, который должен добавить 10 точек на кривой и Replot его. Соответствующие методы:

void ExampleMainWindow::synchronous() 
{ 
    cout << "Creating 10 new data points..." << endl; 
    for(unsigned int i = 0; i < 10; i++) this->createDataPoint(); 
    cout << "xPlot.size() = " << xPlot.size() << " ; yPlot.size() = " << yPlot.size() << endl; 
    this->updateGraph(); 

    return; 
} 

void ExampleMainWindow::updateGraph() 
{ 
    // detach everything? 
    this->qwtPlot->detachItems(); 

    // create a new curve 
    QwtPlotCurve* curve = new QwtPlotCurve("curve 1"); 
    curve->setSamples(QVector<double>::fromStdVector(xPlot), QVector<double>::fromStdVector(yPlot)); 
    curve->attach(this->qwtPlot); 
    this->qwtPlot->replot(); 
    //this->qwtPlot->show(); 

    return; 
} 

Теперь проблема в том, что нажатие кнопки на графическом интерфейсе визуально не менять ничего в QwtPlot. Я уверен, что программа вводит synchronous при нажатии кнопки pushButton. Итак, возможно, что-то не так с функцией updateGraph, но я чего-то не хватает, так как я не могу найти проблему.

Когда я компилирую проекта, я использую Qt 4.8.6, с

qmake-qt4 
make 

, и я не получаю ошибки компиляции. Мой файл проекта Qt:

TEMPLATE = app               
TARGET = example 
QT += widgets 
CONFIG += qwt 
QMAKE_CXXFLAGS += -std=c++11 
DEPENDPATH += ../. \             
      # for Qwt            
      /usr/local/qwt-6.1.3-svn/lib \ 
      /usr/local/qwt-6.1.3-svn/include 
      # end for Qwt 
INCLUDEPATH += ../. \ 
      # for Qwt 
      /usr/local/qwt-6.1.3-svn/include 
      # end for Qwt 
LIBS +=   -lqwt \    
      -L/usr/local/qwt-6.1.3-svn/lib       

# Input                 
FORMS +=  example.ui            
HEADERS =  ExampleMainWindow.h          
SOURCES =  ExampleMainWindow.cpp \         
      main.cpp 

Даже глядя на примеры, которые я нашел в Интернете, я не могу найти проблему. Вы можете мне помочь?

Заранее спасибо за поддержку :-)

EDIT: Фраза указывая вопрос был вырезан по ошибке.

+0

Так в чем проблема? Я думаю, вы забыли упомянуть, что происходит/не происходит, когда вы нажимаете кнопку – Bowdzone

+0

Уопс! :// Одна из фраз была вырезана. Короче говоря, метод updateGraph не обновляет виджет QwtPlot. Я уверен, что программа правильно вводит метод synchronous, но ничего визуально не изменяется при вызове updateGraph. – Alberto

ответ

0

После нескольких испытаний и ошибок я нашел решение: я установил Qwt (я думаю 6.0) через программный центр Ubuntu и удалил все остальные версии Qwt (6.1.2 и 6.1.3), которые у меня были вручную установлен. Теперь небольшой графический интерфейс работает правильно.

Я предполагаю, что ошибка возникла из-за некоторой проблемы на путях, которые я предоставил в файле .pro, но я не мог точно определить точную ошибку. Не совсем удовлетворительный ответ, но по крайней мере он работает.