Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расположить виджеты рядом 
:(
    Опции темы
DarkDante2016
Дата 24.8.2016, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



Код
#include <QtWidgets>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QWidget widget;
 
    QPushButton *pushButtonA = new QPushButton("A");
    pushButtonA->setFixedSize(20, 20);
    QPushButton *pushButtonB = new QPushButton("B");
    pushButtonB->setFixedSize(20, 20);
 
 
    QHBoxLayout *hBoxLayout = new QHBoxLayout;
 
    hBoxLayout->addWidget(pushButtonA, 0, Qt::AlignLeft | Qt::AlignTop);
 
    hBoxLayout->addWidget(pushButtonB, 0, Qt::AlignLeft | Qt::AlignTop);
    hBoxLayout->setMargin(0);
    hBoxLayout->setSpacing(0);
 
    widget.setLayout(hBoxLayout);
 
    widget.resize(200, 200);
 
    widget.show();
 
    return a.exec();
}


Нужно чтобы виджет B шел рядом с виджетом A, но виджет B почему-то далеко от виджета А в чем проблема?

Это сообщение отредактировал(а) DarkDante2016 - 24.8.2016, 19:11
PM MAIL   Вверх
baldman88
Дата 24.8.2016, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: нет
Всего: 7



В widget.resize(200, 200)? Что будет если убрать эту строку? Ну и строки вида hBoxLayout->addWidget(pushButtonХ, 0, Qt::AlignLeft | Qt::AlignTop) избыточны. Достаточно будет просто hBoxLayout->addWidget(pushButtonХ).
PM MAIL   Вверх
DarkDante2016
Дата 25.8.2016, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



widget.resize(200, 200); 

Это вообще к кнопкам никакого отношения не имеет. А размер окна.

Это сообщение отредактировал(а) DarkDante2016 - 25.8.2016, 12:30
PM MAIL   Вверх
baldman88
Дата 25.8.2016, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: нет
Всего: 7



К кнопкам нет. Но к тому, как они будут отображаться очень даже имеет. По умолчанию виджет равномерно распределяет свою площадь под дочерние виджеты. Вот и получается, что под каждую кнопку у Вас выделяется 100х200. Да, Вы сдвигаете кнопки влево и вверх, но это не влияет на размер площади выделенной под них. Если нужно принудительно поместить их рядом, то нужно добавить QSpacerItem.
Код
#include <QtWidgets>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QWidget widget;
 
    QPushButton *pushButtonA = new QPushButton("A");
    pushButtonA->setFixedSize(20, 20);
    QPushButton *pushButtonB = new QPushButton("B");
    pushButtonB->setFixedSize(20, 20);
 
 
    QHBoxLayout *hBoxLayout = new QHBoxLayout;
 
    hBoxLayout->addWidget(pushButtonA, 0, Qt::AlignLeft | Qt::AlignTop);
 
    hBoxLayout->addWidget(pushButtonB, 0, Qt::AlignLeft | Qt::AlignTop);

    hBoxLayout->addItem(new QSpacerItem(200, 200);

    hBoxLayout->setMargin(0);
    hBoxLayout->setSpacing(0);
 
    widget.setLayout(hBoxLayout);
 
    widget.resize(200, 200);
 
    widget.show();
 
    return a.exec();
}
Если я все правильно понял.
PM MAIL   Вверх
DarkDante2016
Дата 25.8.2016, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



Спасибо большое. То есть то что я задаю 20X20 на самом деле 100X200?
PM MAIL   Вверх
baldman88
Дата 25.8.2016, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: нет
Всего: 7



Не совсем так. Кнопки будут именно 20х20, но площадь на которой они будут размещаться будет 100х200. Ради интереса можно поэкспериментировать с размерами кнопок. Например, если размер кнопки А задать 150х20, а кнопки В 20х20, то под первую кнопку выделится площадь 150х200, а под вторую -- 50х200 (при размере главного виджета 200х200, пробелах между виджетами равными нулю и отступами равными нулю). Для создания интерфейса советую использовать Qt Designer. Раньше сам его недолюбливал, но со временем понял, что это очень удобная вещь. Главное научиться им пользоваться  smile 
PM MAIL   Вверх
DarkDante2016
Дата 26.8.2016, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



Qt Designer действительно вещь удобная. Только сначала лучше иметь небольшой багаж знаний на уровне самому это разместить самописно чтобы там проблем потом не возникло при быстрой разработке. Хотя с помощью неё вначале можно решать такие проблемы как у меня визуально видя это. Правда я только вчера туда 
немного раньше твоего ответа зашел вспомнил что есть просмоторщик(ну и создатель) Qt Designer, но мысль до конца сформировать помог уже ты.
PM MAIL   Вверх
borisbn
Дата 26.8.2016, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(DarkDante2016 @  26.8.2016,  09:03 Найти цитируемый пост)
Qt Designer действительно вещь удобная. Только сначала лучше иметь небольшой багаж знаний на уровне самому это разместить самописно 

Я, например, если возникают подобные проблемы, набрасываю нужный интерфейс в дизайнере, затем генерю ui_filename.h файл и подсматриваю там, как правильно сделать тот или иной трюк в интерфейсе


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DarkDante2016
Дата 26.8.2016, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



Цитата(borisbn @  26.8.2016,  11:17 Найти цитируемый пост)
Я, например, если возникают подобные проблемы, набрасываю нужный интерфейс в дизайнере, затем генерю ui_filename.h файл и подсматриваю там, как правильно сделать тот или иной трюк в интерфейсе 


Можешь пожалуйста сказать как генериш?

Это сообщение отредактировал(а) DarkDante2016 - 26.8.2016, 16:51
PM MAIL   Вверх
borisbn
Дата 1.9.2016, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(DarkDante2016 @  26.8.2016,  16:48 Найти цитируемый пост)
Можешь пожалуйста сказать как генериш?

В Qt Designer'е выбираю пункт меню "Форма/Показать код...".
Можно и просто создать временный виджет, добавить его в проект, запустить компиляцию, затем найти файл ui_widget_name.h. В нём, по существу, одна функция - setupUi()


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DarkDante2016
Дата 17.9.2016, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.8.2016

Репутация: нет
Всего: нет



Еще вопрос такой как задавать местоположение элемента в компоновке (через setGeometry не работает)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1125 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.