Nano Hash - криптовалюты, майнинг, программирование

Qt4: размещение экземпляра QMainWindow внутри другого QWidget/QMainWindow

Я хотел бы разместить экземпляр QMainWindow внутри другого QWidget (например, CentralWidget другого QMainWindow).

Мне интересно, почему это не работает? QMainWindow напрямую наследуется от QWidget. Размещение QWidget внутри другого QWidget работает нормально.

Я часто размещаю экземпляры QMainWindow в QTabBar без каких-либо проблем.

ps Вы можете спросить, зачем мне нужно использовать QMainWindow? Я хочу разместить 2 виджета внутри 1 формы, используя вертикальную компоновку. Я хочу, чтобы оба виджета имели отдельные панели инструментов непосредственно над ними.

Может быть, есть другой способ разместить панели инструментов внутри простых QWidgets с помощью QtCreator?


Редактировать

Первый пример (работает нормально)

Я создаю новый класс/форму на основе QWidget. (QtCreator создает 3 файла *.cpp, *.h и *.ui на основе стандартных шаблонов).

Объявление класса выглядит так

class NotesEditor : public QWidget
{
    Q_OBJECT

public:
    explicit NotesEditor(QWidget *parent = 0);
    ~NotesEditor();

private:
    Ui::NotesEditor *ui;
};

Когда я пытаюсь использовать этот виджет и помещать его в другой виджет, он работает нормально. Я использовал функцию «продвигать до ...» qtcreator - здесь нет проблем.

Второй пример (не работает)

Я создаю новый класс/форму на основе QMainWindow. (QtCreator создает 3 файла *.cpp, *.h и *.ui на основе стандартных шаблонов).

Объявление класса выглядит так:

class Notes : public QMainWindow
{
    Q_OBJECT

public:
    explicit Notes(QWidget *parent = 0);
    ~Notes();

private:
    Ui::Notes *ui;
};

И теперь, когда я пытаюсь поместить этот виджет в другой виджет, его не видно. Так же, как и раньше, я использовал функцию «продвигать до ...» qtcreator.

Оба виджета (первый основан на QWidget, второй основан на QMainWindow) имеют одинаковую структуру по умолчанию, основанную на стандартных шаблонах кода qtcreator. Здесь я почти ничего не менял - просто добавил несколько кнопок в дизайнере форм.

Во втором примере я попытался использовать setEnabled(true) и setVisible(true) для экземпляра класса. Первый не дает результатов. Второй открывает этот виджет в отдельном окне.


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


  • Можете ли вы уточнить, что именно происходит. Когда вы говорите, что это не работает, что происходит на самом деле? Выдает ошибку или просто ничего не показывает? 15.06.2011
  • Я дал дополнительное описание. Ошибок нет, во втором примере ничего не появляется. 15.06.2011

Ответы:


1

Столкнувшись с той же проблемой, я нашел решение здесь.

QMainWindow устанавливает тип своего окна в Qt::Window, так что оно будет в независимом окне, даже если у него есть родитель (вы можете подтвердить это, вызвав show() в вашем QMainWindow, и вы увидите его в своем собственном окне). Попробуйте добавить строку

window->setWindowFlags(Qt::Widget);

после создания QMainWindow.

08.08.2012
  • Ссылка на решение битая 22.05.2019

  • 2
    centralwidget = new QMainWindow(this);
    centralwidget->setWindowFlags(Qt::Widget);
    setCentralWidget(centralwidget);
    

    Это должно помочь.

    22.02.2012

    3

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

    Вы должны убедиться, что каждый QMainWindow has centralQWidget`, кроме этого, у вас все в порядке.

    14.06.2011
  • Я знаю, что такое QMainWindow. Этот пост вообще не отвечает на мой вопрос. 14.06.2011
  • Что ж, если ваш вопрос I'm wondering why it doesn't work ?, я попытался ответить так же точно, как и сам вопрос. Есть только одна вещь, которая может помешать вам делать то, что вы пытаетесь сделать: отсутствие центрального виджета. Вы можете создать свой собственный макет с панелями инструментов внутри каждой вкладки QTabBar. Укажите, что вам нужно, и, по крайней мере, предоставьте код и/или сообщения об ошибках. Я не могу читать твои мысли. 14.06.2011
  • Я дал более подробное описание проблемы. Я думал, что мой вопрос был простым. Ошибок нет, все очень просто. В любом случае спасибо за помощь :) 15.06.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..