2012-03-27 9 views
1

私はQPainterと長方形を持っています。Qt:ダミーライン編集コントロールを描画する方法

私はQLineEditコントロールを描画したい、空です。それを描くだけで、ライブコントロールはできません。それ、どうやったら出来るの?私は無駄にQStyle :: drawPrimitiveを試しました。何も描かれない。

QStyleOption option1; 
option1.init(contactsView); // contactView is the parent QListView 
option1.rect = option.rect; // option.rect is the rectangle to be drawn on. 
contactsView->style()->drawPrimitive(QStyle::PE_FrameLineEdit, &option1, painter, contactsView); 

もちろん、私は描画されたダミーをWindowsとOSXでネイティブに見せたいと思います。

+0

本当に 'QLineEdit'を作成してから' qlineedit-> setEnabled(false) 'を設定できますか?それとも、あなたの目的のために正しい行動/外観を生成しませんか? – tmpearce

答えて

1

コードはかなり近いですが、偽のQLineEditからスタイルを初期化する必要があります。以下はQLineEdit::paintEventQLineEdit::initStyleOptionに基づいています。

#include <QtGui> 

class FakeLineEditWidget : public QWidget { 
public: 
    explicit FakeLineEditWidget(QWidget *parent = NULL) : QWidget(parent) {} 
protected: 
    void paintEvent(QPaintEvent *) { 
    QPainter painter(this); 

    QLineEdit dummy; 

    QStyleOptionFrameV2 panel; 
    panel.initFrom(&dummy); 
    panel.rect = QRect(10, 10, 100, 30); // QFontMetric could provide height. 
    panel.lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, 
              &panel, 
              &dummy); 
    panel.midLineWidth = 0; 
    panel.state |= QStyle::State_Sunken; 
    panel.features = QStyleOptionFrameV2::None; 

    style()->drawPrimitive(QStyle::PE_PanelLineEdit, &panel, &painter, this); 
    } 
}; 

int main(int argc, char **argv) { 
    QApplication app(argc, argv); 

    FakeLineEditWidget w; 
    w.setFixedSize(300, 100); 
    w.show(); 

    return app.exec(); 
} 
+0

そのトリックをうまくやった。ありがとう。 – JasonGenX

関連する問題