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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с наследником QToolButton  (Прочитано 6559 раз)
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();

Ничего не происходит... кнопка остается такой же как и была...
В чем проблема может быть?
« Последнее редактирование: Апрель 22, 2009, 15:22 от dr_Begemot » Записан
spirit
Гость
« Ответ #1 : Апрель 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);
   }
}
 
Записан
spirit
Гость
« Ответ #2 : Апрель 22, 2009, 15:30 »

а что собственно не работает в твоем примере, вроде все ок?
Записан
dr_Begemot
Гость
« Ответ #3 : Апрель 22, 2009, 15:43 »

а что собственно не работает в твоем примере, вроде все ок?

Не рисует на кнопке квадрат нужного цвета...
Записан
dr_Begemot
Гость
« Ответ #4 : Апрель 22, 2009, 15:44 »

можно и без наследования сделать

То что вы написали, делает нужным цветом не саму кнопку, а фон за ней...
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Апрель 22, 2009, 15:44 »

look at this: http://www.qt-apps.org/content/show.php/iisColorGrid?content=90324
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
spirit
Гость
« Ответ #6 : Апрель 22, 2009, 15:46 »

а что собственно не работает в твоем примере, вроде все ок?

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

взял проверил, все рисует.
Записан
spirit
Гость
« Ответ #7 : Апрель 22, 2009, 15:47 »

можно и без наследования сделать

То что вы написали, делает нужным цветом не саму кнопку, а фон за ней...
а надо кнопку или фон?  Улыбающийся
Записан
dr_Begemot
Гость
« Ответ #8 : Апрель 22, 2009, 15:51 »

можно и без наследования сделать

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

Ну чтоб было видно, что выбран такой-то цвет... в идеале центральная часть кнопки)
Записан
spirit
Гость
« Ответ #9 : Апрель 22, 2009, 15:53 »

работает твой код, только иконка очень маленькая сделай чуть больше
+ я бы при ресайзе кнопаря апдейтил бы размер иконки.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Апрель 22, 2009, 15:55 »

А зачем иконку устанавливать? Непроще ли палитру поменять?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spirit
Гость
« Ответ #11 : Апрель 22, 2009, 15:56 »

А зачем иконку устанавливать? Непроще ли палитру поменять?
не понравился мой пример с палитрой че-то  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Апрель 22, 2009, 16:30 »

Код с кути-аппса должен работать 100%...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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