|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
[QT] Painting
Salve, sto trasformando una semplice applicazione facendo un porting da C# a QT. Ho creato un progetto QT che importa una UI creata con QTDesigner.
Ora il mio problema è il seguente: vorrei cliccando un pulsante che in un widget che ho inserito nella UI venisse disegnato qualcosa, anche un semplice punto, giusto per capire. Ho provato varie soluzioni, non ho errori di compilazione, ma non riesco a visualizzare nulla. Sotto riporto il codice: -----myqtapp.h----- #include "ui_myqtapp.h" class myQtApp : public QWidget, private Ui::myQtAppDLG { Q_OBJECT public: myQtApp(QWidget *parent = 0); public slots: void doSomething(); }; -----myqtapp.cpp-------- #include <QtGui> #include "myqtapp.h" myQtApp::myQtApp(QWidget *parent) { setupUi(this); connect( btnCrea, SIGNAL( clicked() ), this, SLOT( doSomething() ) ); } void myQtApp::doSomething() { // Qui dentro vorrei capire come fare per disegnare un punto dentro alla //widget della UI che ho chiamato "widget". } Se qualcuno mi potesse aiutare o darmi qualche dritta... PS: utilizzo QT 4, quindi da quel che ho capito cè la novità arthur.. Grazie in anticipo.. Saluti |
|
|
|
|
|
#2 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Devi usare QPainter.
http://doc.trolltech.com/4.4/qpainter.html void SimpleExampleWidget: { QPainter painter(this); painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 30)); painter.drawText(rect(), Qt::AlignCenter, "Qt"); } |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Sinceramente non l'ho mai fatto,ma credo che sia necessario fare l'override della "paintEvent()" del widget in questione per disegnare quello che vuoi nel widget usando un oggetto QPainter
Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
Ciao, intanto grazie delle risposte,
ho provato a inserire il codice seguente, ma non riesco a richiamarlo e a visualizzare le modifiche.. Mi spiego, il mio widget è un widget che ho chiamato "Finestra" e sta all'interno della UI che ho creato col designer.. Codice:
void SimpleExampleWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 30));
painter.drawText(rect(), Qt::AlignCenter, "Qt");
}
grazie in anticipo ;-) |
|
|
|
|
|
#5 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Paint Event è una funzione protected di QWidget.
Devi creare una sottoclasse di QWidget e reimplementare paintEvent. class SimpleExampleWidget: public QWidget{ ............... void SimpleExampleWidget: { QPainter painter(this); painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 30)); painter.drawText(rect(), Qt::AlignCenter, "Qt"); } .............}; SimpleExampleWidget non la puoi usare nel designer se non crei un plugin e ti consiglio di non farlo mai. Quindi ti conviene aggiungere SimpleExampleWidget al posto del widget che vuoi usare oppure dentro il widget che vuoi usare. |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Nov 2008
Messaggi: 7
|
Salve,
grazie per le precedenti risposte. Sono riuscito finalmente a disegnare qualcosa dentro la ui. Ora però ho un'altro problema. All'avvio del programma, mi viene disegnato automaticamente quello che è contenuto nel metodo paintEvent (non capisco perchè), comunque, quello che vorrei fare è associare a un pulsante un evento di disegno attraverso la chiamata alla funzione doSomething(). Sembra che il connect (Che ho evidenziato in rosso) non faccia il suo lavoro e non riesco a capire come fare richiamare un evento di disegno dentro a quella funzione.. Qualcuno può darmi una mano? grazie anticipatamente!! riporto qui sotto il codice interessato: Codice:
#include <QtGui>
#include "test.h"
Test::Test(QWidget *parent)
: QWidget(parent)
{
setupUi(this);
m_drawer->installEventFilter(this);
connect(pushButton, SIGNAL( clicked()), this, SLOT( doSomething() ));
}
void Test::doSomething()
{
//vorrei in qualche modo qui dentro disegnare qualcosa di diverso da
quello che automaticamente mi disegna all'avvio.
}
bool Test::eventFilter(QObject *o, QEvent *e)
{
if (o == m_drawer && e->type() == QEvent::Paint) {
QPainter painter(m_drawer);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 30));
painter.drawText(m_drawer->rect(), Qt::AlignCenter, "Qt");
return true;
}
return QWidget::eventFilter(o, e);
}
void Test::paintEvent(QPaintEvent *event){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 15, Qt::SolidLine, Qt::RoundCap,Qt::MiterJoin));
painter.setBrush(QBrush(Qt::blue, Qt::DiagCrossPattern));
painter.setPen(QPen(Qt::yellow, 5, Qt::SolidLine, Qt::RoundCap,Qt::MiterJoin));
painter.translate(100.0,100.0);
painter.drawPie(0, 0, 300, 300, 60 * 16, 270 * 16);
painter.drawEllipse(30,30,60,60);
}
Ultima modifica di pippofrank : 09-12-2008 alle 22:33. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:54.



















