QT:复杂布局和无缝窗口背景图像

时间:2011-02-01 21:28:32

标签: qt

在QT圣贤的帮助下,我能够实现此窗口,具有所需的布局和可调整大小的行为。现在我有另一个有趣的问题。

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

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

My window

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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。 : - )

答案 2 :(得分:0)

早期版本的Qt中有一个QWidget :: setBackgroundOrigin()方法。

现在所有的风格都完成了。请参阅示例http://doc.qt.nokia.com/latest/widgets-styles.html