crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику quarz ::: Спасибо сказали: 5 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
11.1.2013, 18:57 Удаление объекта из QList
QMainWindow надо обрести понимание указателей, т.к. это полный бред:
Цитата(QMainWindow @ 10.1.2013, 10:28) *
Ну да, это я ошибся. Ну понятно, имелось ввиду создать виджет, положить ЕГО в список, а то, что осталось удалить.

Когда ты создаешь объект (TObject здесь может быть любым типом),
TObject* pObj = new TObject();

он физически размещается в оперативной памяти, а (uint)pObj хранит адрес памяти, по которому разместился объект. Если тебе (вдруг) нужен именно список самих объектов, то так и пишешь:
QList<TObject> myObjectList;
TObject* pObj = new TObject();
myObjectList.append(*pObj);     // необходимо разыменование указателя


А если же тебе нужен список Указателей на объекты, то:
QList<TObject*> myPtrObjectList;
TObject* pObj = new TObject();
myPtrObjectList.append(pObj);

и здесь удалять тоже ничего не нужно: переменная pObj исчезнет, когда будет покинута ее область видимости, а сам объект *pObj, тебе нужно будет удалить перед удалением его из списка:
delete myPtrObjectList[i];
myPtrObjectList.removeAt(i);
QMainWindow,
10.5.2011, 13:22 кнопка "?" - what's this
Разобрался :)
Режим WhatsThis при включении инициирует событие QEvent::EnterWhatsThisMode, в его обработчике и надо выключать режим.
Часть кода для минимального примера:
Раскрывающийся текст
bool aboutTest::event(QEvent *mEvent)
{  
    if(mEvent->type() == QEvent::EnterWhatsThisMode)    //не даем войти в режим WhatsThis
        QWhatsThis::leaveWhatsThisMode();
    else if (mEvent->type()==QEvent::QueryWhatsThis)    //при нажатии на "?" показываем окно "О программе"
    {
        about();
    }
    return QMainWindow::event(mEvent);
}

void aboutTest::about()
{
    QMessageBox::about(this, tr("About Icons"),
            tr("The <b>Icons</b> example illustrates how Qt renders an icon in "
               "different modes (active, normal, disabled, and selected) and "
               "states (on and off) based on a set of images."));
}

А вопрос о целесообразности такого применения остается
Litkevich Yuriy,
1.12.2010, 13:49 RadioButton в QGroupBox
Цитата(Obey-Kun @ 1.12.2010, 6:17) *
Вот тут аналогичная проблема и есть решение — http://www.qtcentre.org/threads/23063-Usin...kable-QGroupBox (первый результат в гугле по запросу «qgroupbox checkable radiobutton»)
Может, то решение быстрее?

Спасибо, это то что надо! Тоже искал на qtcentre, видимо не по тем словам )


Цитата(Litkevich Yuriy @ 1.12.2010, 11:19) *
Цитата(quarz @ 1.12.2010, 2:52) *
Хочу сделать в GroupBox вместо checkbox-а radiobutton.
ничего не понял. для чего вся эта петрушка? Чем обычные радиокнопки помещённые в QGroupBox не устраивают?

Radiobutton-ы должны быть у GroupBox-a вместо checkbox-a, когда он checkable

Цитата(Andrewshkovskii @ 1.12.2010, 11:24) *
Что же это за интерфейс такой, что надо выбирать ГРУППУ с помощью переключателя?? Странно, очень странно..
Проще уж тогда поставить картинки переключателя, заместо чекбокса через CSS.
Все равно даже если и перерисовывать,придется описывать поведение такого виджета вручную.

Интерфейс такой: есть 3 группы контролов, активной может быть только одна. На самом деле оч логично и удобно получается.
Картинку переключателя ставить нельзя - не кроссплатформенно.
А поведение пришлось сделать вручную, да.
Andrewshkovskii,
25.10.2010, 22:51 QComboBox со стилями линий
Как раз делал такое в прошлом году. На pixmap рисуется линия и ставится иконкой в item комбобокса.

Раскрывающийся текст
//QComboBox *linestyleBox;

linestyleBox->setIconSize(QSize(40, 10));
QPen pen;
QPainter paint;
pen.setWidth(3);
pen.setColor(QColor(Qt::black));
paint.begin(&pixmap);

//Solid
pixmap.fill(QColor(Qt::white));
pen.setStyle(Qt::SolidLine);
paint.setPen(pen);
paint.drawLine(0, 5, 40, 5);
linestyleBox->insertItem(0, QIcon(pixmap), "Solid line", Qt::SolidLine);
//DashLine
pixmap.fill(QColor(Qt::white));
pen.setStyle(Qt::DashLine);
paint.setPen(pen);
paint.drawLine(0, 5, 40, 5);
linestyleBox->insertItem(0, QIcon(pixmap), "Dash line", Qt::DashLine);
//... другие типы линий

Buzzer,
27.4.2010, 3:21 Что нужно для Linux приложения?
Цитата(kibsoft @ 26.4.2010, 22:29) *
Linux приложению не хватит просто, чтобы все зависимости лежали в /use/lib ?
Зависимости определил через ldd.


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

А вот тут хорошо описано как это все устроено в линуксе
http://www.opennet.ru/base/dev/shared_lib_intro.txt.html
kibsoft,

RSS Текстовая версия Сейчас: 25.11.2024, 9:51