QT: сложная компоновка и бесшовное фоновое изображение окна - PullRequest
1 голос
/ 02 февраля 2011

С некоторой помощью от вас, мудрецов QT, я смог реализовать это окно с желаемым макетом и поведением изменяемого размера. Теперь у меня есть еще одна интересная проблема.

Я хочу, чтобы у всего моего окна была бесшовная картина "repeat-xy". Если я применяю его к простому окну без макета и внутренних виджетов, оно работает отлично. Однако у меня теперь есть «дерево» виджетов внутри виджетов, и я не могу настроить таблицу стилей так, чтобы рисовать мое бесшовное фоновое изображение для каждого из них, потому что это выглядит неестественно. Изображение должно лежать в основе всей имеющейся у меня топологии виджетов. Проблема в том, что он невидим, когда я применяю его к нижнему виджету, покрывающему все окна, потому что поверх него есть виджеты.

Есть ли решение? может быть, «прозрачные виджеты», которые могут содержать видимые виджеты?

My window

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Я сделал следующее, используя только 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 голосов
/ 02 февраля 2011

В более ранних версиях Qt был метод QWidget :: setBackgroundOrigin ().

Теперь все сделано со стилями.Смотрите примеры http://doc.qt.nokia.com/latest/widgets-styles.html

0 голосов
/ 02 февраля 2011

Напишите свой собственный виджет, который наследует 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

Хотя paintEvent объекта my_widget пусто, оба QPushButton отрисовываются. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...