Qvector и QGridLayout |
Здравствуйте, гость ( Вход | Регистрация )
Qvector и QGridLayout |
Andrewshkovskii |
5.9.2009, 22:06
Сообщение
#1
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Давненько я здесь не бывал, всем привет!Вот возникла следующая проблема , небольшой примерчик понять не могу :
mainwindow.h
mainwindow.cpp
Суть вот в чем : захотел я покать в QGridLayout, и решил тыкать в него QPushButton, да не простые, а из вектора. Только вот ничего не вышло из этого, и проблема видимо в моем недопонимании cpp.. в чем проблема ? |
|
|
Litkevich Yuriy |
5.9.2009, 22:23
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
this->btnVector.append(this->btni); this->btnVector.at(0)->setText("bla"); this->gl->addWidget(this->btnVector.at(0)); Цитата void QVector::append ( const T & value ) Inserts value at the end of the vector. Понял почему? и для компоновщика по сетке нужно координаты указывать. |
|
|
Andrewshkovskii |
5.9.2009, 22:26
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Не совсем, ну аппенд вставляет переданное ему в конец вектора, я обращаюсь в 0-му элементу, он там , я так понимаю, должен быть после аппенда?Или тут дело в константной ссылке?
Вообще я попробовал обратиться к элементу через QVector::last() - ничего не изменилось Про то что нужно указывать координаты - я почитал, в данном случае он должен установить новую кнопочку на место старой( написано - что по умолчанию элемент устанавливается в позицию 0 0) |
|
|
Litkevich Yuriy |
5.9.2009, 22:29
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
я обращаюсь в 0-му элементу, он там , я так понимаю, должен быть после аппенда? нет, всякий раз ты обращаешся к одному и тому же виджету (который ты вставил в первый раз), а не вновь добавленному в вектор.Поэтому неполучится: в данном случае он должен установить новую кнопочку на место старой можешь использовать: Цитата void QVector::prepend ( const T & value )
Inserts value at the beginning of the vector. |
|
|
Andrewshkovskii |
5.9.2009, 22:31
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
2 Litkevich Yuriy смотри вот так
Совершенно ничего не изменилось.Что-то я дурак то ли лыжи не едут.. Сообщение отредактировал Andrewshkovskii - 5.9.2009, 22:32 |
|
|
Litkevich Yuriy |
5.9.2009, 22:36
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Совершенно ничего не изменилось. а какой результат-то получаешь?Яб вообще не так сделал:
Причина редактирования: звёздочку забыл
|
|
|
Andrewshkovskii |
5.9.2009, 22:45
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Да никакого результата, мне нужно посмотреть как ведет себя QGridLayout при постоянном добавлении в него элементов. В моем примере никакой элемент почему-то не добавляется.
В твоем примере тоже , так же ничего не происходит. видимо потому-что указатель созданный в слоте уничтожается после завершения работы слота.. Да и потом, если кнопочку показать( QPushButton::show()) , то она покажется, а вот в лейаут ложиться не хочет.. Сообщение отредактировал Andrewshkovskii - 5.9.2009, 22:46 |
|
|
Litkevich Yuriy |
5.9.2009, 23:03
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
видимо потому-что указатель созданный в слоте уничтожается после завершения работы слота указатель "b" больше и не нужен.а вот в лейаут ложиться не хочет.. а как ты это определил. Если по растягиванию окошка, то окошку ты компоновщик не назначил. (this->setLayout())
|
|
|
Andrewshkovskii |
5.9.2009, 23:16
Сообщение
#9
|
Активный участник Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1 |
Ну если только QGridLayout::addWidget его копирует, тогда да, не нужен я думаю. Oh shi~... Вот это я тупанул!простите!!!
Пфф.. Ну про то, что он не ложиться в лейаут я определил визуально - он не появился на виджете. Хм..изменил QMainWindow на QWidget и все вроде б заработало...странно. Сообщение отредактировал Andrewshkovskii - 5.9.2009, 23:04 |
|
|
Litkevich Yuriy |
5.9.2009, 23:39
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 20.12.2024, 13:06 |