PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Button festsetzen



Namron
04-08-2004, 07:00
hallo

ich habe auf eine tabelle einen button gesetzt der ein neues fenster öffnet. dieser bewegt sich beim scrollen aber immer mit und das war eigentlich nicht so gedacht. gibt es vllt die möglichkeit diesen button auf dem header der tabelle festzusetzen?
oder kann man auch mit einem doppelklick auf den header ein fenster öffnen?

Boron
04-08-2004, 09:30
Was hat ein Button in einer Tabelle verloren, quasi als Teil davon?
Eine absolut logische Konsequenz ist, wie du bemerkt hast, dass der Button sich beim Scrollen der Tabelle bewegt.

Ich würde dann doch gänzlich anders Layouten.
Setze den Button doch über die Tabelle, oder daneben.

Namron
04-08-2004, 09:44
hmm ja nur weiß ich nicht wie ich es anders machen sollte
ich hatte mir schon überlegt einen doppelklick auf den header zu der tabelle zu machen um ein neues fenster zu öffnen .... nur weiß ich nicht wie ich diese bewerkstelliegen soll

Stanislaus
04-08-2004, 10:08
Darf man mal so ganz blöd fragen womit Du die GUI bastelst?

Bis neulich ...

Namron
04-08-2004, 10:35
ich bastel es einfach mit denm Quelltext also einfachem Text Editor und kompiliere mit der Konsole

Stanislaus
04-08-2004, 10:37
Ich wollte nicht wissen, wie Du Deinen Quelltext schreibst, sondern welches GUI Toolkit unter welchem Betriebssystem Du einsetzt.

Bis neulich ...

Namron
04-08-2004, 10:50
ich arbeite unter suse Linux
und schreibe es in QT aber ich verwende kein spezielles Toolkit

Stanislaus
04-08-2004, 10:58
QT ist das "spezielle Toolkit".
Und mit QT kenne ich mich nicht wirklich aus, so daß ich Dir wohl nicht weiterhelfen kann.

Bis neulich ..

Namron
05-08-2004, 07:39
hmm ok^^
kann mir vllt jemand sagen wie ich das mit dem doppelklick auf den header der tabelle bewerkstelligen kann?
oder ob das überhaupt umzusetzen ist?

Boron
05-08-2004, 10:25
QTable::doubleClicked ( int row, int col, int button, const QPoint & mousePos )Dieses Signal wird bei einem Doppelklick emittiert.
Lies mal in der Qt API-Doku nach, sehr hilfreich das ganze ;).

Namron
05-08-2004, 11:09
ja danke
ich hatte mri imme nur die QHeader in der doc angesehen^^
und hatte es nur geschafft das es sich mit einem klick aber mit keinem doppelklick öffnet :rolleyes:

anda_skoa
05-08-2004, 11:14
Das doubleClicked Signal von QTable ist aber für den Bereich des Tables.

Doppelklicks auf den TableHeader könnte man mit einem Eventfilter am Header bekommen oder in dem man einen Klasse von QTableHeader ableitet, dort mouseDoubleClickEvent() implementiert und eine Instanz davon am QTable setzt.

Man kann schon auch einen Button fix am Table Widget plazieren, in dem man als Widetparent des Buttons den Viewport des Tables benutzt, aber das sieht sicher ziemlich eigenartig aus und verdeckt immer einen Teil des Table Inhalts.

Ciao,
_

Namron
05-08-2004, 14:18
danke für die ausführliche hilfe :)
nur könntest du mir vllt einen beispiel quelltext geben ... ich habe es zwar versucht mit dem ableiten usw aber irgentwie bekomme ich es nicht hin
natürlich nur wenn es keine umständen amcht
:)

anda_skoa
06-08-2004, 17:38
Tut mir leid, hab da QTable mit einem anderen Widget verwechselt :(
QTable benutzt sogar eine interne private Klasse als Header.

Vielleicht kannst du es über eine Art Doubleclick Detektor machen, also einen Slot mit dem clicked Signal des Headers verbinden und dann im Slot ein QTime Objekt starten.
Bei einem weiteren Click dann nachsehen, ob die elapsed() Time <= QApplication::doubleClickIntervall() ist

Also in etwa so


class DoubleClick : public QObject
{
Q_OBJECT

signals:
void doubleClick(int section);
public slots:
void slotClick(int section);

private:
int m_lastSection;
QTime m_time;
};




void DoubleClick::slotClick(int section)
{
if (m_lastSection != section)
{
m_lastSection = section;
m_time.restart(;
}
else
{
if (m_time.elapsed() <= QApplication::doubleClickIntervall())
{
emit doubleClick(section);
m_lastSection = -1; // reset
}
else
{
m_time.restart();
}
}
}


Ciao,
_

Namron
09-08-2004, 09:14
ok danke werde es gleich mal ausprobieren :)