作成しようとしているドラッグ アンド ドロップ エディターの描画領域として機能するウィジェットをスクロール領域に保持しようとしています。しかし、私はそれを描くことができないようです。
ここに写真があります:http://i.imgur.com/rTBjg.png
右側の黒いスペースは、私のスクロールエリアになるはずのものです
これが私のウィンドウクラスのコンストラクターです(私はQt-Creatorを使用しています):
ModelWindow::ModelWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ModelWindow)
{
ui->setupUi(this);
editor = new ModelEditorWidget(this);
ui->scrollArea->setWidget(editor);
}
モデル エディター ウィジェットは次のようになります。
//header
class ModelEditorWidget : public QWidget
{
Q_OBJECT
public:
explicit ModelEditorWidget(QWidget *parent = 0);
signals:
public slots:
protected:
virtual void paintEvent(QPaintEvent *e);
};
//.cpp file:
ModelEditorWidget::ModelEditorWidget(QWidget *parent) :
QWidget(parent)
{
this->setAcceptDrops(true);
this->resize(1000, 1000);
cout << this->rect().x() << " " << this->rect().width() << endl;
this->update();
}
void ModelEditorWidget::paintEvent(QPaintEvent *e)
{
cout << "painting";
QWidget::paintEvent(e);
QPainter painter(this);
painter.setBrush(QBrush(Qt::green));
painter.setPen(QPen(Qt::red));
painter.drawRect(400, 400, 50, 50);
painter.fillRect(e->rect(), Qt::SolidPattern);
}
これにより、modeleditorwidget のサイズが 1000x1000 に設定され、ウィジェットに緑または赤の長方形が描画されると思います。ただし、paintEvent の先頭にある cout からのコマンド ラインに「ペイント」メッセージがないことは、それが実行されていないことを示しています。これは、ウィジェットの幅が 0 で高さが 0 だったためだと最初に疑っていました。ただし、コンストラクターの cout は、ウィジェットが x = 0 および幅 = 1000 に配置されていることを示しているため、サイズ変更ステートメントと一致するため、指定された高さも 1000 であると想定します。
編集:呼び出すcout.flush()
ことで、「絵画」出力が得られました。ただし、ペイント イベントは実際にペイントしているようには見えないため、謎が深まるだけです。現在、スクロール領域とウィジェットの両方で show を呼び出しています。
ここで私が間違っている可能性があることを誰かが見ていますか? おそらく、ModelEditorWidget をスクロールエリアに適切に追加していないのでしょうか?
ところで、私は Qt に非常に慣れていません。これは、Qt を使用した最初の主要な GUI プロジェクトです。他のほとんどの GUI は C# で .NET を使用して作成しましたが、これをクロス プラットフォームにしたいので、C#.NET と mono から離れて Qt を使用することにしました。