Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: zayac_val от Ноябрь 18, 2009, 10:32



Название: Заголовок для QColorDialog ?
Отправлено: zayac_val от Ноябрь 18, 2009, 10:32
Есть такой класс QColorDialog, мне очень хочетса задать свой заголовок диалогового окна, а не "select color", это вобще возможно ?


Название: Re: Заголовок для QColorDialog ?
Отправлено: lit-uriy от Ноябрь 18, 2009, 10:37
Все визуальные компоненты - наследники QWidget, а виджетам, если они являются окнами, можно задавать заголовок.
Смотри список унаследованных членов и найди там функцию содержащую слово "Title"


Название: Re: Заголовок для QColorDialog ?
Отправлено: zayac_val от Ноябрь 18, 2009, 10:52
В принцепе, проблема заключается в том, что для того чтоб воспользоваться setWindowTitle, унаследованной от QWidget нужно создать экземпляр класса QColorDialog, а у него конструктор private и соответственно компилятор матом кроет на любую попытку создать объект QColorDialog. Это как-то можно обойти ?


Название: Re: Заголовок для QColorDialog ?
Отправлено: spectre71 от Ноябрь 18, 2009, 10:59
В принцепе, проблема заключается в том, что для того чтоб воспользоваться setWindowTitle, унаследованной от QWidget нужно создать экземпляр класса QColorDialog, а у него конструктор private и соответственно компилятор матом кроет на любую попытку создать объект QColorDialog. Это как-то можно обойти ?
У кого - кто private. Ты хоть сам понимаешь о чем пишешь?
lit-uriy тебе ответил на вопрос.


Название: Re: Заголовок для QColorDialog ?
Отправлено: zayac_val от Ноябрь 18, 2009, 11:20
В принцепе, проблема заключается в том, что для того чтоб воспользоваться setWindowTitle, унаследованной от QWidget нужно создать экземпляр класса QColorDialog, а у него конструктор private и соответственно компилятор матом кроет на любую попытку создать объект QColorDialog. Это как-то можно обойти ?
У кого - кто private. Ты хоть сам понимаешь о чем пишешь?
lit-uriy тебе ответил на вопрос.

Вот header файл класса QColorDialog  -> qcoordialog.h
Код:
#ifndef QCOLORDIALOG_H
#define QCOLORDIALOG_H

#include <QtGui/qdialog.h>

QT_BEGIN_HEADER

QT_BEGIN_NAMESPACE

QT_MODULE(Gui)

#ifndef QT_NO_COLORDIALOG

class QColorDialogPrivate;

class Q_GUI_EXPORT QColorDialog : public QDialog
{
    Q_OBJECT
    Q_DECLARE_PRIVATE(QColorDialog)

public:
    static QColor getColor(const QColor& init = Qt::white, QWidget* parent=0);
    static QRgb getRgba(QRgb = 0xffffffff, bool* ok = 0, QWidget* parent=0);

    static int customCount();
    static QRgb customColor(int);
    static void setCustomColor(int, QRgb);
    static void setStandardColor(int, QRgb);

#ifdef QT3_SUPPORT
    static QColor getColor(const QColor& init, QWidget* parent, const char* name)
        { Q_UNUSED(name); return getColor(init, parent); }
    static QRgb getRgba(QRgb rgba, bool* ok, QWidget* parent, const char* name)
        { Q_UNUSED(name); return getRgba(rgba, ok, parent); }
#endif

protected:
    void changeEvent(QEvent *e);
private:
    ~QColorDialog();
    explicit QColorDialog(QWidget* parent=0, bool modal=false);

    void setColor(const QColor&);
    QColor color() const;

    bool selectColor(const QColor&);

    void setSelectedAlpha(int);
    int selectedAlpha() const;

    void showCustom(bool=true);

private:
    Q_DISABLE_COPY(QColorDialog)

    Q_PRIVATE_SLOT(d_func(), void _q_addCustom())

    Q_PRIVATE_SLOT(d_func(), void _q_newHsv(int h, int s, int v))
    Q_PRIVATE_SLOT(d_func(), void _q_newColorTypedIn(QRgb rgb))
    Q_PRIVATE_SLOT(d_func(), void _q_newCustom(int, int))
    Q_PRIVATE_SLOT(d_func(), void _q_newStandard(int, int))

    friend class QColorShower;
};

#endif // QT_NO_COLORDIALOG

QT_END_NAMESPACE

QT_END_HEADER

#endif // QCOLORDIALOG_H

попробуйте создать объект QColorDialog *cd=new QColorDialog(widget,boole);
rкомпилятор выдаст:   error: 'QColorDialog::QColorDialog(QWidget*,bool)' is private

Может я конечно где-то очень сильно ошибаюсь, но если так то очень прошу объяснить где?


Название: Re: Заголовок для QColorDialog ?
Отправлено: lit-uriy от Ноябрь 18, 2009, 11:23
zayac_val, у тебя Qt какой версии?


Название: Re: Заголовок для QColorDialog ?
Отправлено: lit-uriy от Ноябрь 18, 2009, 11:26
если ниже 4.5.x, то, возможно, через наследование, хотя сомнительно. Скорее всего просто штатный диалог ОСьки вызывается.


Название: Re: Заголовок для QColorDialog ?
Отправлено: zayac_val от Ноябрь 18, 2009, 11:34
если ниже 4.5.x, то, возможно, через наследование, хотя сомнительно. Скорее всего просто штатный диалог ОСьки вызывается.

да, Qt  у меня 4.4


Название: Re: Заголовок для QColorDialog ?
Отправлено: shadone от Ноябрь 18, 2009, 13:57
если ниже 4.5.x, то, возможно, через наследование, хотя сомнительно. Скорее всего просто штатный диалог ОСьки вызывается.

да, Qt  у меня 4.4
Создать экземпляр QColorDialog можно только начиная с 4.5.0 - http://doc.trolltech.com/4.5/qcolordialog.html
Уже вышел релиз-кандидат 4.6.0, давно пора обновляться! :)


Название: Re: Заголовок для QColorDialog ?
Отправлено: panAlexey от Ноябрь 18, 2009, 15:07
Уже вышел релиз-кандидат 4.6.0, давно пора обновляться! :)
угу. прыгать на непроверенные релизы - мега моветон.


Название: Re: Заголовок для QColorDialog ?
Отправлено: shadone от Ноябрь 18, 2009, 16:10
Уже вышел релиз-кандидат 4.6.0, давно пора обновляться! :)
угу. прыгать на непроверенные релизы - мега моветон.
я неточно выразился - я имел ввиду "уже вышел релиз кандидат 4.6.0, давно пора обновиться хотя бы до 4.5". (и добавлю - "релиз-кандидат" означает что качество уже близко к релизному - т.е. 99% функциональности работает без проблем).


Название: Re: Заголовок для QColorDialog ?
Отправлено: Igors от Ноябрь 18, 2009, 16:23
В принцепе, проблема заключается в том, что для того чтоб воспользоваться setWindowTitle, унаследованной от QWidget нужно создать экземпляр класса QColorDialog, а у него конструктор private и соответственно компилятор матом кроет на любую попытку создать объект QColorDialog. Это как-то можно обойти ?
Не понял - зачем наследоваться? Почему не так
Код:
QColorDialog * dlg = new QColorDialog(this);
dlg->setWindowTitle("My Title");
..
dlg->open();

Edit: пардон, забыл что речь идет о старой Qt версии  :)


Название: Re: Заголовок для QColorDialog ?
Отправлено: lit-uriy от Ноябрь 18, 2009, 16:31
Igors, в Qt4.4.x нет открытого конструктора у класса QColorDialog, есть только статические члены