Russian Qt Forum
Ноябрь 25, 2024, 05:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поставить кнопку на GraphicsView  (Прочитано 1986 раз)
Oleg_IT
Гость
« : Август 01, 2012, 12:01 »

Есть окно, на котором отображается рисованная картинка, код инициализации

Код:
    ScreenC *c_ScreenC = new ScreenC();
    QGraphicsScene scene;
    scene.addItem(c_ScreenC);
    scene.setBackgroundBrush(QBrush(c_ScreenC->GetColorScreen()));
    GraphicsView view;
    view.setRenderHints(QPainter::Antialiasing);
    view.setTransformationAnchor(QGraphicsView::NoAnchor);
    view.setScene(&scene);
    QRectF sceneRect = scene.sceneRect();
    view.resize(sceneRect.width(), sceneRect.height());
    view.setSceneRect(sceneRect);


Нужно на этой картинке поставить кнопки, слидары, …
Класс кнопки


Код:
class ButtonControl: public QAbstractButton
//class /*Q_GUI_EXPORT*/ ButtonControl: public QPushButton
{
    Q_OBJECT
    Q_PROPERTY(QString description READ description WRITE setDescription)
    Q_PROPERTY(bool flat READ isFlat WRITE setFlat DESIGNABLE false)
public:
    explicit ButtonControl(QWidget *parent=0);
    explicit ButtonControl(const QString &text, QWidget *parent=0);
    ButtonControl(const QString &text, const QString &description, QWidget *parent=0);
    QString description() const;
    void setDescription(const QString &description);
protected:
    QSize sizeHint() const;
    int heightForWidth(int) const;
    QSize minimumSizeHint() const;
    bool event(QEvent *e);
    void paintEvent(QPaintEvent *);
//private:
//    Q_DISABLE_COPY(QCommandLinkButton)
//    Q_DECLARE_PRIVATE(QCommandLinkButton)
};


Инициализация кнопки

Код:
    view.resize(sceneRect.width(), sceneRect.height());
    view.setSceneRect(sceneRect);
 
    ButtonControl *Btn1 = new ButtonControl(QString("Button"),&view);
    Btn1->move(10,10);
    Btn1->setFixedSize(300,130);
    Btn1->setBaseSize(300,130);
    Btn1->setVisible(true);
 

В результате отображается окно с графикой и отдельно полноценное, со всеми атрибутами, окно кнопки.
Весь код брал из примеров.
Что я не так делаю?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 01, 2012, 12:39 »

создавай сцену и вью динамически, иначе они уничтожаются по выходе из области видимости.

ты используешь Qt 3.x? если нет, то setBaseSize() вызывать и не нужно.

да, и сам ты слидар Веселый
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Oleg_IT
Гость
« Ответ #2 : Август 02, 2012, 09:44 »

Цитировать
да, и сам ты слидар
Да ладно, главное ясно, о чём речь Веселый
Посмотрел я ещё примеры и сделал как в animatedtiles. Но там не совсем полнофункциональная кнопка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.