1

ペイントイベントの使用方法に関する多くの例を見てきましたが、それを機能させることができません。

.ui ファイルに「image」という名前のラベルがあり、その中にペイントしようとしています。みじめに失敗します。私が見たほとんどの例では、

QLabel::paintEvent(e)

しかし、私はこれを使用できません。

error: cannot call member function 'virtual void QLabel::paintEvent(QPaintEvent*)' without object

そして、私が使用するとき

ui->image->paintEvent(e);

私は得る

/usr/include/qt4/QtGui/qlabel.h:141: error: 'virtual void QLabel::paintEvent(QPaintEvent*)' is protected

私は何かが欠けているようです...それは私がこれを実装しようとする私のコードの一部です:

void crop_my_image::paintEvent(QPaintEvent *e)
{
    ui->image->paintEvent(e);
    QPainter painter(ui->image);
    painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
    painter.setBrush(QBrush(QColor(255,255,255,120)));
    painter.drawRect(selectionRect);
}

crop_my_imageQDialogタイプです!

PS:ui->image->paintEvent(e);使用する代わりQDialog::paintEvent(e);に、ダイアログをうまく描画できる場合は、正しい道にいるはずです!

ご回答ありがとうございます。

4

1 に答える 1

3

QDialogで行ったのとまったく同じことをlabelで行う必要があります。これは、QLabelから継承し、paintEvent関数を実装するクラスを作成することです。例:

//MyLabel.h
class MyLabel : public QLabel
{
    Q_OBJECT
    public:
        MyLabel(QWidget *parent = 0);
    private:
        void paintEvent(QPaintEvent *);
};

//MyLabel.cpp

MyLabel::MyLabel(QWidget *parent)
    : QLabel(parent)
{
    /*...*/

}

void MyLabel::paintEvent(QPaintEvent *)
{
    /* paint somehting on your label*/
}

そして、あなたができるよりも:

void crop_my_image::paintEvent(QPaintEvent *e)
{
    myLabelObject->paintEvent(e);
    QPainter painter(ui->image);
    painter.setPen(QPen(QBrush(QColor(0,0,0,180)),1,Qt::DashLine));
    painter.setBrush(QBrush(QColor(255,255,255,120)));
    painter.drawRect(selectionRect);
}

しかし、最初に、なぜこのメソッドを呼び出したいのですか?

于 2012-08-15T17:14:15.620 に答える