QWidget не отображается на весь экран - PullRequest
2 голосов
/ 13 марта 2012

Я новичок в Qt и столкнулся с проблемой в моем приложении. Вот что я пытаюсь сделать.

У меня есть класс с QWidget в качестве родителя. Этот класс имеет сетку на нем. Я установил этот виджет как центральный виджет для главного окна. (эта штука работала нормально, хотя этот виджет не центрирован в главном окне.)

Теперь я хотел повернуть этот виджет на 90 градусов, чтобы он мог отображаться на устройстве в ландшафтном режиме. Поэтому я создал графический вид и добавил к нему этот виджет. (создал сцену, добавил к ней виджет и назначил сцену для просмотра.) Затем этот графический вид был повернут и сделан центральным виджетом. это работало удивительно, и было очень хорошо отцентрировано, также хорошо выглядело на устройстве.

Но в окончательной интеграции мы хотим иметь все QWidget, поэтому графическое представление не вариант. Чтобы справиться с этим, я создал члена Qwidget внутри своего класса. применил макет к нему. добавил этот виджет в graphicsView, и мой класс стал для него родителем.

Это также работает, но имеет аналогичную проблему, с которой я столкнулся на первом шаге, она находится в верхнем левом углу MainWindow и не регулируется по центру. Что еще хуже, при развертывании на устройстве он не был применен ко всему экрану. Виджет сидел в какой-то части верхней левой области и имел полосы прокрутки к нему! Я даже попытался установить максимальное состояние окна, но на него это никак не повлияло.

Вот что я попробовал

Виджет создан внутри моего класса и добавлен в графический вид. этот вид имеет мой класс в качестве родителя, и он будет вращаться с использованием rotate api.

m_gridContainer = new QWidget();
m_gridContainer->setAutoFillBackground(true);
m_gridContainer->setPalette(blackPalette);
m_gridContainer->setLayout(m_grid);
m_gridContainer->setMinimumSize(480,265);

m_scene = new QGraphicsScene(0, 0, 480, 265);
m_window = new QGraphicsView(m_scene,this);
m_scene->setBackgroundBrush(brush);
m_window->setAlignment(Qt::AlignCenter);    
m_scene->addWidget(m_gridContainer,Qt::Widget);

Чтобы использовать его из главного окна

m_window = new CMyWidget(label, m_txtBox->text());    
m_window->getRotatedWidget(90);
setCentralWidget(m_window);

Я попробовал все, что мог, но этот виджет не показывался в полноэкранном режиме (только в небольшой области) и все еще имеет полосы прокрутки к нему. Я понятия не имею, что именно там происходит.

1 Ответ

2 голосов
/ 13 марта 2012

m_gridContainer являясь частью графического элемента графической сцены, он не получает события изменения размера главного окна.

Вы должны обработать resizeEvent() на вашем CMyWidget и отрегулировать размериз ваших m_gridContainer соответственно, например

void CMyWidget::resizeEvent ( QResizeEvent * event )
{
    m_gridContainer->resize(event->size());
}

Кстати, если вы обрабатываете ротацию для использования на мобильном устройстве, это управляется самим Qt (просто изменяя размер вашего главного окна).Вам не нужно делать это в своем коде (на самом деле вы получите виджет, который выглядит так, как будто он был повернут дважды).

...