Russian Qt Forum
Августа 30, 2025, 16:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поверх layout наложить QFrame  (Прочитано 5189 раз)
merke
Гость
« : Июня 01, 2011, 12:26 »

Добрый день.

У меня есть прожка, вот скрин окна:

http://imglink.ru/show-image.php?id=796832ff67c370da742562541076f54b

Почти всё пространство главного окна занимает QTabWidget, есть необходимость посередите этого таба показать QFrame, например с надписью "Идет загрузка...". Ну или например вывести вместо QFrame QLabel.

Так вот делаю следующее:

Код
C++ (Qt)
   QFrame *frame = new QFrame(ui->tabWidget);
   frame->setStyleSheet( "QFrame { background: black }");
   frame->setGeometry(ui->tabWidget->geometry().center().x()/2,ui->tabWidget->geometry().center().y()/2,400,100);
   frame->show();

Но не получается нормально отцентровать фрэйм.

Помогите, пожалуйста!!!
« Последнее редактирование: Июня 01, 2011, 12:27 от Александр » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июня 01, 2011, 12:42 »

Код
C++ (Qt)
frame->resize( 400, 100 );
frame->move(
    ( ui->tabWidget->width() - frame->width() ) / 2,
    ( ui->tabWidget->height() - frame->height() ) / 2 );
frame->raise();
frame->show();
 

Геометрия потомков, всегда рассчитывается относительно их родителя. Ты же пытался использовать абсолютное позиционирование)
« Последнее редактирование: Июня 01, 2011, 12:47 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
merke
Гость
« Ответ #2 : Июня 01, 2011, 12:48 »

Здорово!!!
Спасибо!!!
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Июня 01, 2011, 12:56 »

Кстати, если родительское окно resizable, нужно не забыть следить за его размерами, чтобы делать центровку.
Записан

Qt 5.11/4.8.7 (X11/Win)
merke
Гость
« Ответ #4 : Июня 01, 2011, 12:56 »

Уже и это сделал)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Июня 01, 2011, 13:25 »

Уже и это сделал)
А можно всё это и по-другому сделать:
Код
C++ (Qt)
#include <QApplication>
#include <QStackedLayout>
#include <QGridLayout>
#include <QPushButton>
 
int main( int argc, char** argv )
{
QApplication app( argc, argv );
QWidget mw;
 
QStackedLayout sl( &mw );
sl.setStackingMode( QStackedLayout::StackAll );
 
QWidget w1, w2;
 
QGridLayout l( &w1 );
 
for( int i = 0; i < 5; i++ )
for( int j = 0; j < 5; j++ )
l.addWidget( new QPushButton( QString( "%1:%2" ).arg( i ).arg( j ) ),
i, j );
 
sl.addWidget( &w1 );
 
QGridLayout l2( &w2 );
QPushButton btn( "I'm the top!" );
btn.setFixedSize( 300, 100 );
l2.addWidget( &btn, 1, 1 );
 
sl.addWidget( &w2 );
 
sl.setCurrentIndex( 1 );
 
mw.show();
 
return app.exec();
}
 
« Последнее редактирование: Июня 01, 2011, 13:27 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
merke
Гость
« Ответ #6 : Июня 01, 2011, 13:31 »

Спасибо, возьму на вооружение)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.075 секунд. Запросов: 23.