Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dr_Begemot от Апрель 22, 2009, 15:16



Название: Проблема с наследником QToolButton
Отправлено: dr_Begemot от Апрель 22, 2009, 15:16
Унаследовал ColorButton от QToolButton.
Код:
class ColorButton : public QToolButton
{
Q_OBJECT
public:
ColorButton(QWidget *parent = 0);
void addColor(const QColor color, const QString text);
public slots:
void сolorClicked();
private:
QColor m_color;
};

Хочу, чтобы при нажатии на кнопку можно было выбрать цвет и отрисовать этот цвет на кнопке...
Код:
ColorButton::ColorButton(QWidget *parent) : QToolButton(parent)
{
m_color = Qt::black;
QPixmap pixmap(size());
pixmap.fill(m_color);
QIcon icon;
icon.addPixmap(pixmap);
setIcon(icon);

connect(this, SIGNAL(clicked(bool)), this, SLOT(сolorClicked()));
}

void ColorButton::сolorClicked(){
QColor color = QColorDialog::getColor(m_color);
if(color.isValid()){
m_color = color;
QSize sz = size();
QPixmap pixmap(16,16);
pixmap.fill(color);
QIcon icon;
icon.addPixmap(pixmap);
setIcon(icon);
}

}

Запускаю тест...
Код:
    QApplication app(argc, argv);
    ColorButton test;
    test.setWindowTitle(QObject::tr("test"));
    test.show();
    return app.exec();

Ничего не происходит... кнопка остается такой же как и была...
В чем проблема может быть?


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:23
можно и без наследования сделать
Код
C++ (Qt)
#include <QtGui>
#include "dialog.h"
 
Dialog::Dialog(QWidget *parent)
   : QDialog(parent)
{
   colorLabel = new QLabel;
   colorButton = new QPushButton();
 
   connect(colorButton, SIGNAL(clicked()), this, SLOT(setColor()));
 
   QGridLayout *layout = new QGridLayout;
   layout->setColumnStretch(1, 1);
   layout->setColumnMinimumWidth(1, 250);
   layout->addWidget(colorButton, 0, 0);
   layout->addWidget(colorLabel, 0, 1);
   setLayout(layout);
 
   setWindowTitle(tr("Standard Dialogs"));
}
 
void Dialog::setColor()
{
   QColor color = QColorDialog::getColor(Qt::green, this);
   if (color.isValid()) {
       colorLabel->setText(color.name());
       QPalette palette = colorButton->palette();
       palette.setColor(QPalette::Button,color);
       colorButton->setPalette(palette);
       colorButton->setAutoFillBackground(true);
   }
}
 


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:30
а что собственно не работает в твоем примере, вроде все ок?


Название: Re: Проблема с наследником QToolButton
Отправлено: dr_Begemot от Апрель 22, 2009, 15:43
а что собственно не работает в твоем примере, вроде все ок?

Не рисует на кнопке квадрат нужного цвета...


Название: Re: Проблема с наследником QToolButton
Отправлено: dr_Begemot от Апрель 22, 2009, 15:44
можно и без наследования сделать

То что вы написали, делает нужным цветом не саму кнопку, а фон за ней...


Название: Re: Проблема с наследником QToolButton
Отправлено: Racheengel от Апрель 22, 2009, 15:44
look at this: http://www.qt-apps.org/content/show.php/iisColorGrid?content=90324


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:46
а что собственно не работает в твоем примере, вроде все ок?

Не рисует на кнопке квадрат нужного цвета...

взял проверил, все рисует.


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:47
можно и без наследования сделать

То что вы написали, делает нужным цветом не саму кнопку, а фон за ней...
а надо кнопку или фон?  :)


Название: Re: Проблема с наследником QToolButton
Отправлено: dr_Begemot от Апрель 22, 2009, 15:51
можно и без наследования сделать

То что вы написали, делает нужным цветом не саму кнопку, а фон за ней...
а надо кнопку или фон?  :)

Ну чтоб было видно, что выбран такой-то цвет... в идеале центральная часть кнопки)


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:53
работает твой код, только иконка очень маленькая сделай чуть больше
+ я бы при ресайзе кнопаря апдейтил бы размер иконки.


Название: Re: Проблема с наследником QToolButton
Отправлено: pastor от Апрель 22, 2009, 15:55
А зачем иконку устанавливать? Непроще ли палитру поменять?


Название: Re: Проблема с наследником QToolButton
Отправлено: spirit от Апрель 22, 2009, 15:56
А зачем иконку устанавливать? Непроще ли палитру поменять?
не понравился мой пример с палитрой че-то  :)


Название: Re: Проблема с наследником QToolButton
Отправлено: Racheengel от Апрель 22, 2009, 16:30
Код с кути-аппса должен работать 100%...