Russian Qt Forum
Ноябрь 26, 2024, 07:48
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QT4 и QGridLayout
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QT4 и QGridLayout (Прочитано 9043 раз)
Vassili
Гость
QT4 и QGridLayout
«
:
Июль 25, 2005, 18:34 »
Добрый день!
У меня забавная проблемма с QGridLayout в QT4. Я создаю обычный виджет с помощью wgt = new QWidget(), куда добавляю QGridlLayout* lt = new QGridLayout( wgt ). Потом последовательно создаю несколько виджетов wgtk = new QWidget( wgt ), для них гржу картинку и делаю следующие действия:
QString bgimg( "path" );
QPixmap pix;
if( !bgimg.isNull() ) {
pix = QPixmap( bgimg );
if( !pix.isNull() ) {
QBitmap msk = pix.mask();
pix.setMask( msk );
QPalette palette;
palette.setBrush( wgt->backgroundRole(), QBrush( pix ) );
wgtk->setPalette( palette );
wgtk->resize( pix.width(), pix.height() );
}
}
Потом засовываю wgtk в QGridLayout:
parent_layout->addWidget( wgtk, 0, 0, 1, 1 );
Результирующее поведение - очень странное: всунутый виджет всегда принимает минимальный размер. ( по горизонтали - minimumWidth(), по вертикали - соответственно ). В силу ряда причин мне это очень не удобно, я бы хотел чтобы виджет ресайзился в соответствии с текущим размером родительского виджета. Плюс ко сему - у меня в QGridLayout всегда зазор между ячейками в несколько пикселов и никак его не убрать, а надо. SetMargin SetSpacing не помогают. Кто -нибудь знает как с этим бороться?
Записан
L.Marvell
Гость
QT4 и QGridLayout
«
Ответ #1 :
Июль 25, 2005, 19:53 »
Я не уверен, но может поставить wgtk центральным виджетом?
Код:
setCentralWidget(wgtk);
Записан
Vassili
Гость
QT4 и QGridLayout
«
Ответ #2 :
Июль 26, 2005, 10:45 »
Это в примере только одна wgtk, а в действительности их - десяток. Плюс ко всему - centralWidget - это их родитель. Сегодня буду собирать простой прототип на премет поиграться с layout. Результат отпишу.
Записан
Vassili
Гость
QT4 и QGridLayout
«
Ответ #3 :
Июль 26, 2005, 14:18 »
немного повозился с прототипом, нашел- таки закономерность. Ниже - код прототипа:
#include <QApplication>
#include <QWorkspace>
#include <QPalette>
#include <QGridLayout>
#include <QBrush>
#include <QPixmap>
#include <QDir>
#include <QRegExp>
#include <QSizePolicy>
#include <QPixmap>
#include <QBitmap>
#include <QRect>
#include <QSizePolicy>
#include <QPainter>
#include <QWidget>
const char* files[] = { "frame_top_left.png", "frame_top.png", "frame_top_right.png" };
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
QWorkspace mwd;
mwd.resize( 700, 500 );
mwd.show();
QWidget *wgt;
wgt = new QWidget( &mwd );
mwd.addWindow( wgt );
wgt->resize( 500, 400 );
wgt->show();
QGridLayout *grlt = new QGridLayout( wgt );
grlt->setSpacing( 0 );
grlt->setMargin( 0 );
for( int i= 0; i < 3; i++ ) {
QWidget* wgtk = new QWidget();
QString bgimg( files[ i ] );
QPixmap pix( bgimg );
if( !pix.isNull() ) {
QBitmap msk = pix.mask();
pix.setMask( msk );
QPalette palette;
palette.setBrush( wgt->backgroundRole(), QBrush( QColor( 255/( i+1 ), 255/( i+1 ), 255/( i+1 ) ), pix ) );
wgtk->setPalette( palette );
wgtk->resize( pix.width(), pix.height() );
}
grlt->addWidget( wgtk, 0, i, 1, 1 );
//grlt->addWidget( wgtk, 0, i, 1, 1, grlt->addWidget( wgtk, 0, i, 1, 1, Qt::AlignCenter ); );
wgtk->updateGeometry();
wgtk->show();
}
return app.exec();
}
Как заатачить картинки не знаю но они - простые файлы в формате png. Наверное можно взять любые. В том виде как сейчас прототип работает правильно. Но если сторку grlt->addWidget( wgtk, 0, i, 1, 1 ); закоментировать и откоментировать следующую за ней - получается поведение описаное выше. И так - со всеми аллайнментами. У меня ни с одним так и не заработало. Есть у кого какие идеи?[/img]
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
QT4 и QGridLayout
«
Ответ #4 :
Июль 26, 2005, 16:46 »
а если для виджета поставить политику размеров Fixed ?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Vassili
Гость
QT4 и QGridLayout
«
Ответ #5 :
Июль 26, 2005, 17:22 »
Изменение политики resizePolicy для виджета никак не влияет, я их все перепробовал. не только fixed. Документация по политике какая- ьо невнятная - с одной стороны написано что политика - для детей виджета:- "If there is a QLayout that manages this widget's children, the size policy specified by that layout is used. If there is no such QLayout, the result of this function is used" А если есть лэйаут, то его политика используется. Однако в самом лэйауте никаких методов для управления политиками нет. Да вроде бы и сама политика не для детей, а для самого виджета.
В любом случае это не помогает и лэйаут обязян правильно реагировать на эллайнмент, однако не реагирует!
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
QT4 и QGridLayout
«
Ответ #6 :
Июль 26, 2005, 17:31 »
хм... ну хз... мож баг?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Danila_Bagrofff
Гость
Re: QT4 и QGridLayout
«
Ответ #7 :
Май 28, 2009, 10:56 »
а setMinimumSize выставить?? Хотя и политика должна помогать...
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...