2015-12-07 50 views
1

我正在面對集成在QQuickPaintedItem類中的Widget的一個問題。當我將Widget集成到QQuickPaintedItem中時,QWidget :: isVisible將返回false。如果我試圖設置QWidget :: setVisible(true),那麼它會打開另一個窗口,我不想在我的場景中使用它。 有沒有什麼辦法讓QWidget :: isVisible返回true,這樣我的子窗口小部件(在我的實際場景中,我們有5層的父子層次結構)也能正常工作,當我說QWidget :: show()時?當QWidget集成在QQuickPaintedItem中時,setVisible返回false

我已經創建了與下圖類似的場景。

頭文件

class MyItem: public QQuickPaintedItem{ 
    Q_OBJECT 
public: 

    explicit MyItem(QQuickItem *parent = 0); 
    void paint(QPainter *painter); 
    ~MyItem(); 

    Q_INVOKABLE void initButton(); 

protected: 
    virtual void mousePressEvent(QMouseEvent* event); 
private: 
    QPushButton* bp; 
}; 

源文件:

MyItem::MyItem(QQuickItem *parent) 
    : QQuickPaintedItem(parent) 
{ 
    bp = new QPushButton("Hello"); 
} 

MyItem::~MyItem() 
{ 
    delete bp; 
} 

void MyItem::paint(QPainter *painter){ 
    bp->render(painter, QPoint(), QRegion(), QPushButton::DrawWindowBackground | QPushButton::DrawChildren); 
} 

void MyItem::mousePressEvent(QMouseEvent* event) 
{ 
    qDebug() << Q_FUNC_INFO << bp->isVisible(); 
} 

感謝提前的幫助... !!!

回答

0

我不知道你爲什麼要這樣做。

Qt不支持在Qt5(Qt Quick 2)中將QWidget嵌入到Qt Quick Item中。

在您的代碼中,QWidget是一個獨立的窗口,而您的Qt Quick項目位於它自己的窗口中。

如果你想要你的Qt Quick項目的行爲像一個按鈕,你應該使用Qt Quick的Button控件或自己寫一個。

如果您確實想將QWidget嵌入到Qt Quick的控制樹中,您可以改爲使用Qt Quick 1(Qt4.7/8)。查看QGraphicsProxyWidget的文檔。

相關問題