Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Шуточный пример
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Litkevich Yuriy
Тут написал шуточный примерчик, но может оказатся поучительным для новичков:
Раскрывающийся текст
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>


class MyButton : public QPushButton
{
Q_OBJECT
public:
    MyButton(QWidget *parent = 0);
public slots:
    void slotSetParent(bool checked);

private:
    QWidget *parent;

};

MyButton::MyButton(QWidget *p)
    : QPushButton(0)
{
    parent = p;
    setCheckable(true);
    setText("Click");
    connect(this, SIGNAL(clicked(bool)), this, SLOT(slotSetParent(bool)));
}

void MyButton::slotSetParent(bool checked)
{
    if (checked)
    {
        setParent(parent);
        parent->layout()->addWidget(this);
    }
    else
    {
        setParent(0);
        show();
    }
};

// нужнен после объявления класса, т.к. и объявление и реализация класса в одном файле.
#include "main.moc"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    QVBoxLayout    *lay = new QVBoxLayout();

    QWidget wgt;
    wgt.resize(150, 70);
    wgt.setLayout(lay);
    wgt.show();
    
    MyButton *btn = new MyButton(&wgt);
    btn->show();

    return app.exec();
}
SABROG
Чем-то напоминает QDockWidget, только тут докинг окна при нажатии на кнопку происходит.
Kagami
Очень интересное решение
Litkevich Yuriy
Цитата(SABROG @ 13.4.2009, 3:00) *
Чем-то напоминает QDockWidget, только тут докинг окна при нажатии на кнопку происходит.
вполне возможно, что он примерно так и работает. Потому, наверное, в QMainWindow предусмотрены специальные места для парковки.
ЙаМайскЫйПчОЛ
добавь к кнопке setWindowFlags(Qt::FramelessWindowHint); симпатишней буде
Гость
Цитата(Litkevich Yuriy @ 12.4.2009, 14:17) *
Тут написал шуточный примерчик, но может оказатся поучительным для новичков:



А почему файл *.moc обычно moc_*.cpp от чего это зависит? Вообще другое расширение удобней для поиска и архивации. Чет и в асистанте не нахожу ничего на эту тему
Litkevich Yuriy
Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
Вообще другое расширение удобней для поиска и архивации.
Это ты о чём? о какой архивации? И как это предложение связано с
Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
Чет и в асистанте не нахожу ничего на эту тему
?????

Цитата(Гость_Гость_* @ 16.4.2009, 17:47) *
А почему файл *.moc обычно moc_*.cpp от чего это зависит?
когда объявление класса помещено в отдельный заголовочный файл (myclass.h) программа qmake через make-файл говорит программе moc создать файл moc_myclass.cpp и автоматически добавляет этот файл в список зависимостей компилятора (опять же посредством make-файла).

когда иобъявление класса и его реализация помещены в один файл (myclass.cpp) , тогда программа qmake через make-файл говорит программе moc создать файл myclass.moc. НО НЕ добавляет этот файл в список зависимостей компилятора. Поэтому приходится делать это руками (#incude myclass.moc)

Цитата(Danila_Bagrofff @ 16.4.2009, 16:07) *
wdg->setParent(tbl);
tbl->setCellWidget(0,0, wdg);
тут я что-то совсем проглядел. Ты устанавливаешь и родителя и потом родителю виджет. Если нужно вставлять в ячейку, то устанавливать родителя не надо.

А вообще я чую тема сильно другая и видимо из области "Перетаскивания" (Drag-n-Drop), я прав?
Litkevich Yuriy
Тему разделил: QTableWidget, Как програмно реализовать перетаскивание?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.