2011-02-01 205 views
1

在QT圣人的帮助下,我能够实现这个窗口,具有所需的布局和可调整大小的行为。现在我有另一个有趣的问题。QT:复杂的布局和无缝的窗口背景图像

我希望我的整个窗口有一个“repeat-xy”无缝模式。如果我将它应用到一个没有布局和内部小部件的简单窗口,它可以很好地工作。不过,我现在有一个小部件内部的“树”,我不能将样式表设置为为每个人绘制无缝背景图像,因此看起来不自然。图像必须是我拥有的所有小部件拓扑的基础。问题是,当我将它应用到底部的全窗口小部件时它是不可见的,因为它具有顶部的小部件。

有没有解决方案?也许“透明的小部件”,可以包含可见的小部件?

My window

+0

我想我在寻找一个“格”样的解决方案,不画本身,让什么样的视觉它下面的“彪炳”的容器 – JasonGenX 2011-02-01 22:25:35

回答

2

我做了以下使用只有CSS,有一个QPlainTextEdit,两个QPushButton和一个QLineEdit。在图像我增加了一个红色边框的QPlainTextEdit只有如此可以看出,规则如下

QWidget#Form{ 
    background-image: url(:/img/elephant_pattern.gif); 
} 
QPlainTextEdit{ 
    background:transparent; 
    border:1px solid red; 
} 

正如你所看到的一切,我不得不被设置背景透明的我想要的部件。

enter image description here

0

写自己的小部件,它继承了QWidget。重新实现paintEvent并将其留空。小部件本身不会被绘制,但它的孩子将会被绘制。

my_widget::my_widget(QWidget* parent) : QWidget(parent) 
{ 
} 

void my_widget::paintEvent(QPaintEvent* p_event) 
{ 
    // left empty to let my_widget be invisible 
} 

test_mw::test_mw(QWidget *parent) : QMainWindow(parent) 
{ 
    test_widget = new my_widget(this); 

    QHBoxLayout* layout = new QHBoxLayout(); 

    QPushButton* button0 = new QPushButton("Button 0", 0); 
    QPushButton* button1 = new QPushButton("Button 1", 0); 

    layout->addWidget(button0); 
    layout->addWidget(widget); 

    test_widget->setLayout(layout); 

    setCentralWidget(test_widget); 
} 

enter image description here

虽然my_widget的的paintEvent为空,QPushButtons绘制。 :-)