Pushbutton mit Grafik versehen

Alles rund um die Programmierung mit Qt
Antworten
lori
Beiträge: 16
Registriert: 9. August 2004 13:06

Pushbutton mit Grafik versehen

Beitrag von lori »

Hallo,

ich habe hier folgenden Button:

/*pushbutton 3*/
QPushButton *abbruch = new QPushButton("Beenden",win);
QObject::connect(abbruch, SIGNAL(clicked()), &a, SLOT(quit()) );

dieser ist in einem QGridlayout.
Wie kann ich diesem button anstatt dem Text "Beenden" eine
Grafik möglichst einfach zuweisen? - geht das überhaupt mit QPushButton?

Danke!
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag von miketech »

Hi,

ja das sollte gehen:

Du musst zuerst mit der Klasse QPixmap ein neues Pixmap erstellen. Dieses kannst Du dem Button dann mit:

abbruch->setPixmap(myPixmap);

zuweisen.

Gruß

Mike
martin
Beiträge: 10
Registriert: 25. August 2004 18:03

Beitrag von martin »

Ja es geht auf jeden fall.
z.B so:

Code: Alles auswählen

QPushButton *abbruch = new QPushButton("Beenden",win);

//ein QPixmap Objekt ertellen 
QPixmap myPixmap=QPixmap("'Pfad zu dem bild hier ","PNG",QPixmap::Color);
//PNG wenn bild in PNG Format vorliegt

abbruch->setPixmap(myPixmap); 
 
QObject::connect(abbruch, SIGNAL(clicked()), &a, SLOT(quit()) ); 
Intel Pentium 3.2GHz |RAM-512MB|DSL|OS - Suse Linux Professional 9.1/Windows XP home |
jaegermeister
Beiträge: 70
Registriert: 11. August 2004 07:44
Wohnort: Bergen auf Rügen
Kontaktdaten:

Beitrag von jaegermeister »

Kann ich mit Pixmap auch Farben in einer ComboBox anzeigen?
Die ComboBox soll zur Auswahl von Farben dienen.
Wenn ja werd ich mir das schon suchen.
(will nur nicht umsonst suchen) ;)

Mfg jaegermeister
Wie könnten ja wenn wir wollten, aber wie wollen ja nicht.
lori
Beiträge: 16
Registriert: 9. August 2004 13:06

Beitrag von lori »

@miketech & martin:
besten Dank - das werde ich demnächst gleichmal testen :)

@jaegermeister:
zur Farbauswahl gibt es QColorDialog oder hab ich da jetzt was falsch verstanden?
martin
Beiträge: 10
Registriert: 25. August 2004 18:03

Beitrag von martin »

Kann ich mit Pixmap auch Farben in einer ComboBox anzeigen?
Du meinst das neben dem Farbe-Namen ein kleiner Viereck erscheint in der jeweiligen Farbe.
Wenn du diese viereke als kleine bilder vorchanden hast ist das kein Problem:

Code: Alles auswählen

QPixmap rot=QPixmap("./rot.png","PNG",QPixmap::Color);
QPixmap blue=QPixmap("./blue.png","PNG",QPixmap::Color);
//usw.....
    
 //QComboBox objekt
QComboBox *cb1=new QComboBox (this,"combo1"); 
    
 //hier Einträge mit Text und Bild einfügen 
cb1->insertItem (rot,"Rot",-1 ); 
cb1->insertItem (blau,"Blau",-1 );
//usw... 
Das ist sicher nicht die beste Lösung.Besser wäre die Bilder irgenwie in die ausführbare Datei einbinden, oder gar keine Bilder zu benutzen sonder die Vierecke zu zeichnen. Ich weiss leider nicht wie das geht.
Intel Pentium 3.2GHz |RAM-512MB|DSL|OS - Suse Linux Professional 9.1/Windows XP home |
shermann
Beiträge: 4
Registriert: 27. August 2004 08:44

Beitrag von shermann »

jaegermeister hat geschrieben:Kann ich mit Pixmap auch Farben in einer ComboBox anzeigen?
Die ComboBox soll zur Auswahl von Farben dienen.
Wenn ja werd ich mir das schon suchen.
(will nur nicht umsonst suchen) ;)

Mfg jaegermeister
Ich hab sowas programmiert für meine KMyIRC Applikation. Ist zwar mit KDE aber kann man vom System her auch für QT einsetzen.
Das ganze ist fuer eine ListView geschrieben, aber Du kannst die Items der anderen Boxtypen auch so umsetzen.
Wichtig ist nur der "selfpainting" code.


KMIColorListViewItem.h

Code: Alles auswählen

/***************************************************************************
                          kmicolorlistviewitem.h  -  description
                             -------------------
    begin                : Fre Jun 28 2002
    copyright            : (C) 2002 by Stephan Hermann
    email                : sh@sourcecode.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef KMICOLORLISTVIEWITEM_H
#define KMICOLORLISTVIEWITEM_H

#include <qwidget.h>
#include <qlistview.h>
#include <qpainter.h>
#include <qiconset.h>
#include <kiconloader.h>


/**
  *@author Stephan Hermann
  */

class KMIColorListViewItem : public QListViewItem  {
public: 
	KMIColorListViewItem(QListView *parent=0,const QString &text="",const QString &color="#ffffff");
  KMIColorListViewItem(QListViewItem *item=0,const QString &text="",const QString &color="#ffffff");
  KMIColorListViewItem(QListViewItem *item=0,const QString &text="",const QColor &color=QColor("#000000"));
  KMIColorListViewItem(QListView *parent=0,const QString &text="",const QColor &color=QColor("#000000"));
	~KMIColorListViewItem();
  /** No descriptions */
  virtual void paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align );
  /** No descriptions */
  virtual void setColor(const QColor &color);
  /** No descriptions */
  virtual void setColor(const QString &color);
  /** No descriptions */
  virtual void setText(int column,const QString &text);
  /** No descriptions */
  const QColor & getColor();
  /** No descriptions */
  const QString & getColorName();
private: // Private attributes
  /**  */
  QColor columnColor;
};

#endif
KMIColorListViewItem.cpp

Code: Alles auswählen

/***************************************************************************
                          kmicolorlistviewitem.cpp  -  description
                             -------------------
    begin                : Fre Jun 28 2002
    copyright            : (C) 2002 by Stephan Hermann
    email                : sh@sourcecode.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "kmicolorlistviewitem.h"

KMIColorListViewItem::KMIColorListViewItem(QListView *parent,const QString &text,const QString &color) : QListViewItem(parent,text) {
  columnColor=QColor(color);
}

KMIColorListViewItem::KMIColorListViewItem(QListViewItem *item,const QString &text,const QString &color):QListViewItem(item,text){
  columnColor=QColor(color);
}
KMIColorListViewItem::KMIColorListViewItem(QListView *parent,const QString &text,const QColor &color):QListViewItem(parent,text) {
  columnColor=color;
}

KMIColorListViewItem::KMIColorListViewItem(QListViewItem *item,const QString &text,const QColor &color):QListViewItem(item,text) {
  columnColor=color;
}
KMIColorListViewItem::~KMIColorListViewItem(){
}
/** No descriptions */
void KMIColorListViewItem::paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align ){
  if (column==0) {
    QListViewItem::paintCell(p,cg,column,width,align);
  } else if (column==1) {
    if (!isSelected()) {
      // Draw background to be white if it's not highlighted
      p->fillRect(0,0,width,height(),QBrush(cg.base(),Qt::SolidPattern));
      p->setPen(QPen(QColor("#000000"),0));
      p->drawRect(3,3,width-6,height()-6);    
      p->fillRect ( 4, 4, width-8, height()-8, QBrush(columnColor,Qt::SolidPattern));      
    } else {
      // Draw highlighted background
      p->fillRect(0,0,width,height(),QBrush(cg.highlight(),Qt::SolidPattern));
      p->setPen(QPen(QColor("#000000"),0));
      p->drawRect(3,3,width-6,height()-6);
      p->fillRect ( 4, 4, width-8, height()-8, QBrush(columnColor,Qt::SolidPattern));
    }
  } else {
    QListViewItem::paintCell(p,cg,column,width,align);
  }
}
/** No descriptions */
void KMIColorListViewItem::setText(int column,const QString &text){
  if (column!=1) {
    QListViewItem::setText(column,text);
  }
}
/** No descriptions */
void KMIColorListViewItem::setColor(const QString &color){
  columnColor=QColor(color);
  repaint();
}
/** No descriptions */
void KMIColorListViewItem::setColor(const QColor &color){
  columnColor=color;
  repaint();
}
/** No descriptions */
const QString & KMIColorListViewItem::getColorName(){
  return columnColor.name();
}
/** No descriptions */
const QColor & KMIColorListViewItem::getColor(){
  return columnColor;
}
jaegermeister
Beiträge: 70
Registriert: 11. August 2004 07:44
Wohnort: Bergen auf Rügen
Kontaktdaten:

Beitrag von jaegermeister »

Danke für dein Beispiel @shermann

Ich hab mir eine ComboBox Klasse abgeleitet. Aber wenn ich diese Klasse verwende erscheint keine ComboBox.
Ich weiß nicht so genau was ich in den Konstruktor schreiben soll, vieleicht ist da der Fehler.

Der Konstruktor

Code: Alles auswählen

IComboBox::IComboBox(QWidget *parent, const char * name, const QColor &color )
{
  setColor(color);
}
Mfg jaegermeister
Wie könnten ja wenn wir wollten, aber wie wollen ja nicht.
shermann
Beiträge: 4
Registriert: 27. August 2004 08:44

Beitrag von shermann »

jaegermeister hat geschrieben:Danke für dein Beispiel @shermann

Ich hab mir eine ComboBox Klasse abgeleitet. Aber wenn ich diese Klasse verwende erscheint keine ComboBox.
Ich weiß nicht so genau was ich in den Konstruktor schreiben soll, vieleicht ist da der Fehler.

Der Konstruktor

Code: Alles auswählen

IComboBox::IComboBox(QWidget *parent, const char * name, const QColor &color )
{
  setColor(color);
}
Mfg jaegermeister
Du gehst den falschen Weg.
Du leitest nicht von QComboBox ab, sondern von QListboxItem.
Unter http://doc.trolltech.com/3.3/listboxcom ... html#x2035 findest Du ein Beispiel.

Also, nehmen wir an, Du hast ein QListboxItem abgeleitet, mit deiner eigenen paint methode, dann kannst du mit

Code: Alles auswählen

comboBoxVariable->listBox()->insertItem(deinListBoxItem);
einfuegen.

schau dir das o.g. beispiel an, die machen das naemlich genau so.

wichtig ist dieser auszug:

Code: Alles auswählen

 //...and insert 50 items into the Combobox
    for ( i = 0; i < 50; i++ ) {
        str = QString( "Combobox Item %1" ).arg( i );
        if ( i % 9 )
            cb1->insertItem( str );
        else
            cb1->listBox()->insertItem( new MyListBoxItem );
    }
Das wichtige ist "cb1->listBox()->insertItem( new MyListBoxItem );"
Antworten