Qt 3.0 Beta3 is not binary compatible with Beta2, this means that any programs linked with Beta2 must be recompiled. Below you'll find a description of general changes in the Qt Library and Qt Designer followed by a detailed list of changes in the programming API. The Qt Library ======================================== Documentation ------------- Overall enhancements include fixed typos, corrected grammar and spelling, and the addition of several images and code examples. Most classes now have useful detailed descriptions. Documentation accuracy and usability has been generally improved. Styles ------ In Qt 3.0.0 Beta2, only the Windows and Motif styles were implemented with the new style API. Now the missing styles (MotifPlus, Platinum, SGI and CDE) are included. MNG --- Updated the libmng that is shipped with Qt to version 1.0.2. Wacom Tablet Support -------------------- Fixes for Windows to solve the problem of creating a context for every widget and the problem of opening the dialog and losing the ability to use the tablet afterwards. Qt Designer ======================================== - Added the ability to sort the property editor either by category (default and old behaviour) or alphabetically. - Added the option "-nofwd" to uic which supresses the generation of forward declarations for custom classes in the generated output. - The way how custom slots and editing these slots directly in the Qt Designer is handled has been changed. Originally the code for these slots was saved into the .ui XML file together with the user interface description and the uic did put this code into the generated source files. Now, if code of custom slots is edited directly in the Qt Designer, additionally to the .ui of a form, a .ui.h file is created. The code is written into this source file now instead of the .ui file. This way the code of custom slots can be also easily edited outside the Qt Designer without subclassing, and it is possible to edit it both, in the Qt Designer and outside the Qt Designer without conflicts, as this is a plain text C++ file. Uic now automatically includes this source file into the generated sources (if it exists) and, in this case, does not create empty stubs for the custom slots in the generated sources anymore. So this code file has not to be added to the project Makefile. If the source file does not exist, uic falls back to the old behavior and creates the empty stubs in the generated source. If a user does not want to subclass to implement the custom slots, but also does not want to edit the code of the custom slots in the Qt Designer, it is possible to always create the .ui.h for a form (even if it was not edited in the Qt Designer) and edit that file in a seperate editor. This feature can be configured in the project settings dialog. This way, the old approach of subclassing keeps working (and all old .ui files keep working without any change). Also, for users of the previous Qt 3.0 Beta versions, Qt Designer can still read the .ui files which contain code. So also .ui files created with Qt 3.0 Beta versions of the Qt Designer keep working without any change. Details about the possible concepts which can be used to add code to a form created by the Qt Designer (subclassing and uic + .ui.h) and related information about project management can be found in the chapter about new features in Qt Designer 3.0 in the Qt Designer manual. Qt Functions ======================================== QApplication ------------ - flush() no longer calls sendPostedEvents(), as this might be unsafe under certain circumstances. QDataTable ---------- - Now uses the new row selection mode of QTable. QDomDocument ------------ - Fixed the toString() function to work properly with namespaces. - In Qt 3.0.0 Beta2, there was a workaround for Microsoft's XML parser, so that the toString() function did not output a doctype that consists only of the name. This workaround is semantically wrong; it was reverted. QDateEdit --------- - Fixed wrong default size policy and missing size hint. - Improved focus and tab handling. QEffects -------- - Tooltips and popup menus scroll and fade again QTable ------ - Fixed right mouse button handling. - Implemented row selection modes. This implied adding the new enum values SingleRow and MultiRow to the enum SelectionMode. - Doubleclick clears selections completely now. - Allow different focus styles, namely FollowStyle (draw it as the style tells you) and SpreadSheet (draw it as it is done in common spreadsheet programs). New functions: virtual void setFocusStyle( FocusStyle fs ); FocusStyle focusStyle() const; virtual QRect cellRect( int row, int col ) const; QTimeEdit --------- - Fixed wrong default size policy and missing size hint. - Improved focus and tab handling. QTextEdit --------- - QTextCursor is an internal class, so the signal cursorPositionChanged(QTextCursor*) is only of limited use. Added a more useful signal in addition. - Overrides accelerators for all shortcuts used to edit text. New signal: void cursorPositionChanged( int para, int pos ); QLineEdit --------- - Overrides accelerators for all shortcuts used to edit text. QLibrary -------- - Static overload for resolve as a convenience function. New function: static void *resolve( const QString &filename, const char * ); QListView --------- - A bug that was introduced in Qt 3.0.0 beta 2 made listviews with lots of items very slow. This problem has been fixed. QProcess -------- - exitStatus() did not work for negative values on Unix. This is fixed now. - Fixed problems on Unixware. QRichtext --------- - Fixed searching backwards. - Fixed some BIDI text-rendering problems. QSound ------ - Simplified the API to allow easier extension. New functions: bool isAvailable(); int loops() const; int loopsRemaining() const; void setLoops(int); QString fileName() const; bool isFinished() const; New slot: void stop(); Removed function: bool available(); QSpinBox -------- - Spin box arrows were not updated correctly when the widget was disabled/enabled. This problem is fixed now. - Improved handling of the case when a spinbox accepts a value: now it also accepts it if the spinbox loses focus or is hidden. QSqlCursor ---------- - Add functions to set the generated flag. This is used to avoid the generation of malformed SQL statements. New functions: void setGenerated( const QString& name, bool generated ); void setGenerated( int i, bool generated ); QSqlDriver ---------- - Add new function hasFeature( QSqlDriver::DriverFeature ) const which allows you to query whether the driver supports features like SQL transactions or Binary Large Object fields. The functions hasQuerySizeSupport(), canEditBinaryFields() and hasTransactionSupport() are therefore obsolete and have been removed. New function: bool hasFeature( QSqlDriver::DriverFeature ) const; Removed functions: bool hasQuerySizeSupport() const; bool canEditBinaryFields() const; bool hasTransactionSupport() const; QSqlField --------- - The bool argument of setNull() was removed since it does not make sense to set a field to non null. QTabWidget ---------- - Use the functions below to add tool tips to the individual tabs in a QTabWidget. New functions: void removeTabToolTip( QWidget * w ); void setTabToolTip( QWidget * w, const QString & tip ); QString tabToolTip( QWidget * w ) const; QTabBar ------- - Use the functions below to add tool tips to the individual tabs in a QTabBar. New functions: void removeToolTip( int id ); void setToolTip( int id, const QString & tip ); QString toolTip( int id ) const; QTextStream ----------- - The global functions setw(), setfill() and setprecison() were deleted since they conflict with the std classes. If you need the functionality, use qSetW(), qSetFill() and qSetPrecision() instead. Removed functions: QTSManip setw( int w ) QTSManip setfill( int f ) QTSManip setprecision( int p ) ue='bug_62f1343ad2'>bug_62f1343ad2 Tk is a free and open-source, cross-platform widget toolkit that provides a library of basic elements of GUI widgets for building a graphical user interface (GUI) in many programming languages.
summaryrefslogtreecommitdiffstats
blob: f1f9f9af5cf9f36b891517e17b6b223996fa86e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# panedwindow.tcl --
#
# This file defines the default bindings for Tk panedwindow widgets and
# provides procedures that help in implementing those bindings.
#
# RCS: @(#) $Id: panedwindow.tcl,v 1.11 2005/07/25 09:06:00 dkf Exp $
#

bind Panedwindow <Button-1> { ::tk::panedwindow::MarkSash %W %x %y 1 }
bind Panedwindow <Button-2> { ::tk::panedwindow::MarkSash %W %x %y 0 }

bind Panedwindow <B1-Motion> { ::tk::panedwindow::DragSash %W %x %y 1 }
bind Panedwindow <B2-Motion> { ::tk::panedwindow::DragSash %W %x %y 0 }

bind Panedwindow <ButtonRelease-1> {::tk::panedwindow::ReleaseSash %W 1}
bind Panedwindow <ButtonRelease-2> {::tk::panedwindow::ReleaseSash %W 0}

bind Panedwindow <Motion> { ::tk::panedwindow::Motion %W %x %y }

bind Panedwindow <Leave> { ::tk::panedwindow::Leave %W }

# Initialize namespace
namespace eval ::tk::panedwindow {}

# ::tk::panedwindow::MarkSash --
#
#   Handle marking the correct sash for possible dragging
#
# Arguments:
#   w		the widget
#   x		widget local x coord
#   y		widget local y coord
#   proxy	whether this should be a proxy sash
# Results:
#   None
#
proc ::tk::panedwindow::MarkSash {w x y proxy} {
    variable ::tk::Priv
    if {[$w cget -opaqueresize]} {
	set proxy 0
    }
    set what [$w identify $x $y]
    if { [llength $what] == 2 } {
	lassign $what index which
	if {!$::tk_strictMotif || $which eq "handle"} {
	    if {!$proxy} {
		$w sash mark $index $x $y
	    }
	    set Priv(sash) $index
	    lassign [$w sash coord $index] sx sy
	    set Priv(dx) [expr {$sx-$x}]
	    set Priv(dy) [expr {$sy-$y}]
	    # Do this to init the proxy location
	    DragSash $w $x $y $proxy
	}
    }
}

# ::tk::panedwindow::DragSash --
#
#   Handle dragging of the correct sash
#
# Arguments:
#   w		the widget
#   x		widget local x coord
#   y		widget local y coord
#   proxy	whether this should be a proxy sash
# Results:
#   Moves sash
#
proc ::tk::panedwindow::DragSash {w x y proxy} {
    variable ::tk::Priv
    if {[$w cget -opaqueresize]} {
	set proxy 0
    }
    if {[info exists Priv(sash)]} {
	if {$proxy} {
	    $w proxy place [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}]
	} else {
	    $w sash place $Priv(sash) \
		    [expr {$x+$Priv(dx)}] [expr {$y+$Priv(dy)}]
	}
    }
}

# ::tk::panedwindow::ReleaseSash --
#
#   Handle releasing of the sash
#
# Arguments:
#   w		the widget
#   proxy	whether this should be a proxy sash
# Results:
#   Returns ...
#
proc ::tk::panedwindow::ReleaseSash {w proxy} {
    variable ::tk::Priv
    if {[$w cget -opaqueresize]} {
	set proxy 0
    }
    if {[info exists Priv(sash)]} {
	if {$proxy} {
	    lassign [$w proxy coord] x y
	    $w sash place $Priv(sash) $x $y
	    $w proxy forget
	}
	unset Priv(sash) Priv(dx) Priv(dy)
    }
}

# ::tk::panedwindow::Motion --
#
#   Handle motion on the widget.  This is used to change the cursor
#   when the user moves over the sash area.
#
# Arguments:
#   w		the widget
#   x		widget local x coord
#   y		widget local y coord
# Results:
#   May change the cursor.  Sets up a timer to verify that we are still
#   over the widget.
#
proc ::tk::panedwindow::Motion {w x y} {
    variable ::tk::Priv
    set id [$w identify $x $y]
    if {([llength $id] == 2) && \
	    (!$::tk_strictMotif || [lindex $id 1] eq "handle")} {
	if {![info exists Priv($w,panecursor)]} {
	    set Priv($w,panecursor) [$w cget -cursor]
	    if {[$w cget -sashcursor] ne ""} {
		$w configure -cursor [$w cget -sashcursor]
	    } elseif {[$w cget -orient] eq "horizontal"} {
		$w configure -cursor sb_h_double_arrow
	    } else {
		$w configure -cursor sb_v_double_arrow
	    }
	    if {[info exists Priv($w,pwAfterId)]} {
		after cancel $Priv($w,pwAfterId)
	    }
	    set Priv($w,pwAfterId) [after 150 \
		    [list ::tk::panedwindow::Cursor $w]]
	}
	return
    }
    if {[info exists Priv($w,panecursor)]} {
	$w configure -cursor $Priv($w,panecursor)
	unset Priv($w,panecursor)
    }
}

# ::tk::panedwindow::Cursor --
#
#   Handles returning the normal cursor when we are no longer over the
#   sash area.  This needs to be done this way, because the panedwindow
#   won't see Leave events when the mouse moves from the sash to a
#   paned child, although the child does receive an Enter event.
#
# Arguments:
#   w		the widget
# Results:
#   May restore the default cursor, or schedule a timer to do it.
#
proc ::tk::panedwindow::Cursor {w} {
    variable ::tk::Priv
    # Make sure to check window existence in case it is destroyed.
    if {[info exists Priv($w,panecursor)] && [winfo exists $w]} {
	if {[winfo containing [winfo pointerx $w] [winfo pointery $w]] eq $w} {
	    set Priv($w,pwAfterId) [after 150 \
		    [list ::tk::panedwindow::Cursor $w]]
	} else {
	    $w configure -cursor $Priv($w,panecursor)
	    unset Priv($w,panecursor)
	    if {[info exists Priv($w,pwAfterId)]} {
		after cancel $Priv($w,pwAfterId)
		unset Priv($w,pwAfterId)
	    }
	}
    }
}

# ::tk::panedwindow::Leave --
#
#   Return to default cursor when leaving the pw widget.
#
# Arguments:
#   w		the widget
# Results:
#   Restores the default cursor
#
proc ::tk::panedwindow::Leave {w} {
    variable ::tk::Priv
    if {[info exists Priv($w,panecursor)]} {
        $w configure -cursor $Priv($w,panecursor)
        unset Priv($w,panecursor)
    }
}