Qt text editor on picture - text

I haven't found an exact question on this.
I have a picture, it could be blank for the sake of the example, or contain something that I want to add a fancy caption to. I want to add text editing means (akin to Photoshop) on top of the picture.
I'm thinking about subclassing QGraphicsScene and placing a subclassed QTextEdit object on the scene upon pressing a text placement button. Then, when you click on this object, in addition to editing the text, additional text editing tools become available - so you can set parts of text to bold, italic, modify color, size, etc. And then you would be able to change the object's position - and I think that's available in QGraphicsScene by default. And for the background QBrush, there would be a background picture.
Is this a reasonable solution?
Maybe there are any ready-available examples of this, but I haven't found them yet.

My solution
Text item:
For the text item, I used QGraphicsScene with a subclassed QGraphicsTextItem. For the background picture, I used a QGraphicsRectItem with a QBrush and a loaded picture using QImage methods.
To edit parts of the selected text in this subclassed QGraphicsTextItem:
QTextCharFormat applied to my subclassed QGraphicsTextItem using QGraphicsTextItem::textCursor().mergeCharFormat(...). This way I can change formatting, such as boldness, italics, etc. on the selection only.
Some more thingies:
To pan and zoom around the scene, I used an excellent guide by Vpicaver complete with source code from http://www.qtcentre.org/wiki/index.php?title=QGraphicsView:_Smooth_Panning_and_Zooming

Related

Resizing the actual Tabs in a (Godot) TabContainer, is it possible?

Given some Tabs in a Godot TabContainer, I'd like to resize the actual Tab-elements (not the container they're a part of.
Given that so many things are customizable, it seems like these would be too, but so far I haven't found how. The question How to resize a Tab, sounded promising, but the "Custom Style" that it referred to, doesn't seem to exist - or at least didn't appear in a help-search.
Update: The given answer got me closer. There's a lot of variables, it's definitely not production-ready, but it does at least, appear possible to modify the size of Tabs. And just realized that one of the variables is Content-Margin, I had edited just Margin, to create this picture.
You have to learn about themes in Godot to resize your elements.
In the editor select the TabContainer, in the Inspector search the Theme property, and in the Theme variable below you can load a theme or create a new one for your project.
If you create a new theme there will be a file with a extension ".tres". Double click on that file to edit the aspect of different elements for your project.
I will try to add more detail. If you edit your theme file ( .tres), with the Type: TabContainer, you can override the multiple StyleBox of the Tab. I tried with the tab_fg, click on the plus sign, later in [Empty], New StyleBoxFlat, click on the new StyleBox Flat created in the field, and edit it in the Inspector. Edit the Expand Margin values, and also the Content Margin values.
You can also increase the font size, overriding the font with a New Dynamic Font, selecting it and editting it in the Inspector, in settings-> Size.
You can find further info in the UI tutorials section on GUI skinning

WiX Installer placing checkbox below custom bitmap image on dialog

I've added the "Launch program" checkbox on the final card of the installer, but for some reason WiX is placing the checkbox below the custom bitmap instead of on top of it with the other text. Can someone point me in the right direction to getting the checkbox directly below the other text instead of below the background image?
I followed the tutorial on this page to add the checkbox: https://wixtoolset.org/documentation/manual/v3/howtos/ui_and_localization/run_program_after_install.html
I came across this page on the WiX toolset docs. Basically, it says that the checkbox with the grey background is a common complaint and there's a workaround mentioned, but not a way to remove the background.
And a common complaint: no, the checkbox can't have a transparent background. If you have a bitmap in the background, it will be ugly, just like in our example above. The only workaround is to reduce the width of the checkbox to the actual box itself and to place an additional static text (these can be made transparent) adjacent to it.
EDIT (for completeness): It looks like my initial guess on what was going on with the bitmap image wasn't accurate, based on the above-quoted page. Closing this as answered.

Fabric.js / Text Edit on mobile

I'm trying to use TUI Image Editor (https://github.com/nhn/tui.image-editor) in my Cordova app on Android.
It is based on Fabric.js and overall working reasonably, however I have major problems with the text annotation: If the edited text is in the lower part of the screen, the Android softkeyboard is covering the text input and doesn't scroll it into view. This also happens when I run the page in the normal Android Chrome browser.
Are there any recipes or examples how to get that working with Fabric.js?
I had the same problem, and I just avoided using the IText and Textbox objects. I just used the html input field and object with type Text in fabric.js without editing inside canvas, and editing inside input and changing text object to input value. Because if you will use the IText and Textbox objects, you will face problems with editing text on small texts, or text objects with a small scale, where editing inside canvas will be difficult and annoying.
If you still want to scroll to text object I can't give you a full solution. But I think you can use canvas events for text
canvas.on('text:editing:entered', (textObject) => {
// calculate canvas offset and textObject offset and scroll to this position
})

How to change color of TEdit when focused

It's probably easy question, bu I can't find an answer.
I want to change background color of TEdit component when I click on it (on Focus), and the background should back to previous color when I click somewhere else.
P.S. I use a Firemonkey and it's multiplatform app, so I need to use a style.
The easiest way (and best) - place TRectangle without Stroke into Tedit, set its Align to Client and change its Fill color in Object Inspector.
Hard way:
Tedit is using bitmap from styles. You can see your current style for Tedit - place StyleBook, Load your style from file, find 'editstyle' object.
You can create a new style for Tedit (copy 'editstyle' in your current style, and name it like editstyle1, select background > Source Link in Object Inspector - select part on global style bitmap with your color, then you can change to new style like Edit1.StyleLookup := 'editstyle1';
Also use a useful forum: http://fire-monkey.ru with Google Translate.

iOS view size and position hard-coded only?

I'm new to Macs and iOS, I got my app running on webOS, Android, and WPF/Windows. In all cases the size of, say, a 'widget' to display a bunch of text, can change depending on the dimension of the text to be displayed, as well as the position can be up against another widget. As the text size changes, the position will change so that all the widgets are crammed together nicely.
I've been searching for this capability in IOS4 in books and on-line, and it's starting to look like in iOS, you have to actually calculate the size of the text to be displayed in ViewText and then change the dimensions of ViewText, which of course then bumps other Views around to accommodate this size change. It sounds like a nightmare. Isn't there some other way to do this (like all the other GUIs can do) to size based on content, and to position relative to other Views like stacking them all together whatever size they are?
Same with ScrollView, it looks like the size of the window you actually see has to be manually specified as well, instead of, say, taking up the entire viewable window and then you can populate the ScrollView with a bunch of sub-views, some of which are below the initially viewable area? I tried this in Xcode4, but so far, haven't gotten it to work.
Similarly with creating an object with a NIB and instantiating that NIB onto an existing View, how does it determine where to position this NIB onto the existing screen?
Thanks!
Paul,
For the scrollview you need to set the bounds so it fills the screen or the area you wish it to occupy, it will then automatically generate scrollbars based on the layout within it. In the land of iOS you do have to do extensive layout work such as positioning and sizing your controls but you can also use the UIAutoResize (if I remember correctly) masks such as if they are anchored to a size, fill the area, etc. It's a little complicated to learn initially but you'll get the hang of it.
As for text you just need to use the right control, I believe what you want is a UITextView and set the options on it as needed.
When you view a XIB it's going to layout initially as you have it, again, you need to position your controls AND set their anchors (autoresize masks) so they adjust based on the screen size (phone vs. pad) and orientation: landscape vs. portrait.
HTH

Resources