You are here

Theming in Qtractor

/ Edited: 17/01/2024 /
Topic for everything related to Qtractor theming.
Themes availables:
(Attach two starting approaches for two visual themes and a proposal for functionalities.)

Image icon master_theme.png252.26 KB
Image icon punk_theme_2.png237 KB
Image icon conf.png44.92 KB

Thanks to all the great stuff produced by this thread, I've been fumbling around in an effort to create a "Grayscale" theme. Here's a preview followed by a question or two as well as another request to EOL of the midi & audio icons.

Full screen sequencer

Full screen mixer

Is the Mixer window not using the same Base color (or Window...... whatever it might be... I can't remember) as the Sequencer? It seems a tad lighter with maybe a hint of redness to it. I was wondering if it may have been the monitor but the image shows the difference.

I'm trying to move away from the whole green/yellow thing and you'll notice I set MIDI tracks to some kind of pink and some audio to some kind of blue. These wouldn't be the final colors but I wanted to see the beginnings of anything different. As I suspected, those hard-coded MIDI and Audio icons are just getting in the way. Can we get a toggle or something to hide them? Honestly, I don't even see the value in the information as it seems entirely redundant with the color strips. Even the icons present in the Audio menu of a Track Mixer Strip provide no real value at all when you think about it.

While I'm asking to hide things, how about the up and down arrows in the various input fields (time, tempo, pan, gain, etc)? I can't imagine ever clicking on these things as it's much easier to simply use the scroll wheel on a mouse, move a fader, or simply type in an exact value when known. I only ask to hide them because I believe they might be icons? If so, one wouldn't just be able to set a compatible color in a style sheet and call it a day.

Anyway, thanks for all the cool stuff in this thread. Very exciting!

OK... one more.... maybe an option to hide the "beat" icon in the Snap pulldown menu? Or actually.... just kill it? Again, it's not providing any value.

Not gonna lie, I kinda wish we had a "no icon" version. Not entirely sure how that would work but figured I'd share the random thought :)

First of all, I'm glad that someone else is encouraged to create themes.
The color difference you indicate between the mixer window and the general one is due to the qss.

I assign a gradient to the main sequencer window.
In the current version 1.5 it is also applied to the midi editor window.

qtractorMainForm, /* Sequencer */
qtractorMidiEditorForm /* Midi Editor */ {
     background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
     stop:0 #34363B,
     stop:1 #5C5650

I consider that the mixer window for my topic does not require that gradient, because it is not a work area, but a tool.

You can delete the code.
Or add the mixer:

qtractorMixer /* Window Mixer */ {
     background: qlineargradient(x1:0, y1:0, x2:1, y2:1,
     stop:0 #34363B,
     stop:1 #5C5650

This overwrites the "Window" color of the Color Theme.
That has advantages and disadvantages, it depends on what you want to achieve.

"about the up and down arrows in the various input fields"
Fortunately it is possible to eliminate them from QSS. It took me a while to find a way, but I finally found it.
In version 1.5 of Tecnico I have eliminated them from the "information screens" of the potentiometers.

qtractorMixerStrip QAbstractSpinBox::up-button {
   width: 0;
   height: 0;
qtractorMixerStrip QAbstractSpinBox::down-button {
   width: 0;
   height: 0;

We must understand that QSS has limitations. For Qt it is not the main way to visually shape the interface (as happens in html with CSS), but rather a complementary tool.
Furthermore, if we compare it with CSS, it has many fewer options.

For example, modifying toolbar and menu icons is practically impossible.

Even so, there are solutions for what you propose.
We can't remove them with QSS, but we can create an icon theme where those icons you don't want are a transparent .png.

Of course, the icon space would still remain on the Mixer buses. It is not possible to resolve that.

As for the specific Midi and Audio icons, the inconsistency that arises when customizing the color for Midi and Audio (the icons still remain yellow and green) is easily solved. Create new icons without color coding, just white, black and gray.
Thus, these will only offer information coded in symbol, and the bars and volumeters will only offer information coded in color.
I do not consider it to be redundant but complementary.

It is true that having to compile to have our Qtractor to our liking is laborious, but it can be done.

Qtractor (and Qt aplications in general) is not designed to be able to use icon packs, and I think it is not an easy functionality to implement.


I'm looking at 1.5 now in order to work these diffs out and go from there. I wanted to mention it would be better to zip up a directory named - rather than just . It allows the recipient to simply extract the directory in a non-clobbering manner side by side with the old version so they don't have to risk breaking something that was in a known state. Switching between the versions then gets handled with a symlink which all scripts, configs, etc are pointing to.

The idea is to update in a simple way, I overwrite and that's it.
To see differences between codes, provides us with a better tool.
By the way, don't trust the version numbers, but rather the commit date. If there has been an error or a small change, it is not worth it for me to change the versions of the files.

This is the tool:

An example of symbolic icons so they don't clash with customizable color coding.

Thanks again! I'm going to play with these tweaks tonight and have really been enjoying this thread.

As for the icons, I wonder if we could swap them out for glyphs from the likes of nerdfonts? That might be a whacky suggestion though.

Coming along nicely. Loving this! Is it time to start talking about the vertical bars like play-head, edit-head, and edit-tail?

grayscale sequencer grayscale mixer

The theme looks calm. He invites you to sit down and work with him.

Thank you. I'll get this into a VCS as soon as I think it's as ready as I can make it.

rncbc's picture

Q. Is it time to start talking about the vertical bars like play-head, edit-head, and edit-tail?

A. sorry to tell, probably not: these are all hard-coded colors and not able to be addressed by style-sheets whatsoever and that, I'm afraid, won't change anytime soon, sorry again.

and again, may I ask, what's really the problem with that thinly red/blue lines anyhow? is it just a nitpick or is it something else in disguise that I can't grasp? ;)

They're just ugly and I'm ashamed of them (LOL) :)

Regarding the mixer strip names, can we chop off anything after a newline? These 2 images show the current situation and when we think about it, the mixer strip is never going to really show (cleanly) any more than 3 or 4 characters anyway (depending on font size, etc). The hover feature can be used as needed to read the full text.

strip names track names

Thanks in advance

File attachments: 

_Technician 1.6:
Improves consistency across active and preselected items.

Minimalist and calm

Focused on electronic music

File attachments: 

I was just about to go chill out and watch a move but now you know I need to check these out! :D

Ver well done. Congrats.

I just pushed my Grayscale theme up to windowsrefund/grayscale-theme. It's still a work-in-progress unless it's not.

Thank you Rui and G3N-es for the help and inspiration.

I've only seen it in screenshots.
I have to compile Qtractor again and I'll take the opportunity to test it.

If you give me permission I will include it on the VTQ page.
I'll just adapt the a bit ans add de pre extensión _Colors and _Style.

I'm still devising the format, and I need it to be like this for concept reasons.

For example, before my included a "Content" section. I'm going to change it to "Related". This would allow creating themes with mixed resources: Combine Colors from one theme with Images from another with Styles from another, to create a new theme.

In that case the theme would only contain one file,, which is responsible for defining the theme, for create a relationship. Each relation is an individual with its own meaning, who when related creates another individual with its own meaning, the relationship.

I know that this generates dependencies, and I would have to investigate how to resolve them.
Including the url of the dependencies as you have done in your theme with the icons can be a solution.
(For me, reinventing the wheel makes sense)

I wanted to share with you something I discovered recently.
We can access the colors.conf directly from the qss.

#menuBar { background: palette(window); }

Search "PaletteRole" in
to see the colors you have access to.

This simplifies the construction of themes, and opens doors to making child themes easily.
For example, you can create a "light" child version of an originally "dark" theme without touching the qss.


This sounds like it offers a ton of potential. I suspect the biggest challenge might come down to understanding what the keys used in the .conf file actually translate to. I'm talking about the Base, Mid, etc... keys... But yea, I completely see how cool this could be.

Yea sure. Although, I'd suggest your VTQ suite of themes can certainly withstand maintaining their own file name conventions. After all, those conventions exist mainly for your development and corresponding documentation consistencies. In other words, an external (non-VTQ) theme can do whatever it wants so long as it succeeds in educating the end user how to get use of it.

I'm still working on this one and suspect it will evolve in due time. For example, I can't seem to figure out how to get rid of the gradient used on the "Beat" pull-down menu. There are probably some additional icons I'll want to "hide" as well that don't typically come up in my work flow.

Fun stuff!

Of course, everyone can create the theme with the conventions they want.
The adaptation to my format is my responsibility, and if anyone else wants to use it.
Although I'm still shaping it, so I don't recommend anyone use its conventions, because they are subject to modification.

Thanks for allowing me to add it.

KOSAI's picture

screenshot Hi all.

I'm trying to make a custom theme based on other peoples works. I noticed a lot of UI codes are inside C++ files. I can only do a few things using QSS. I attached a screenshot I'm currently making.

I removed Sequencer Shadows and the Color of edit-head and edit-tail by changing some C++ code. By the way, I'm not a computer programmer. I read a little bit of documentation at Qt website.

It would be nice if I can make everything using QSS. For now, I've to recompile qtractor every single time after I change something in CPP files.

I don't want to change codes inside cpp files. But currently it's the only way to make change that I want.
Oh...anybody know a way to change the color of Piano Roll? The Black & White Piano keys color?

qtractorTrackList.cpp, Line Number 1207

    QLinearGradient grad(0,, 0, rect.bottom());
    grad.setColorAt(0.4, bg);
    grad.setColorAt(1.0, bg.darker(120));
    pPainter->fillRect(rect, grad);

I can't change the Track List gradient so I tried change that code. It's work but not as I expected.
There are a lot of codes like that in cpp files.
I don't know what to do. I know I shouldn't mess around with source code.

File attachments: 
rncbc's picture

you can't change the black and white color, obviously they are hard-coded.

but anyway you've already done that kind of changing to other things, so why don't go ahead? just don't ask later to make it like permanent, because... reasons ;)

hyu. cheers

KOSAI's picture

I'm scared I'm gonna break software. I won't request to make it permanent.
I know nothing about software development but I know it's very complicated thing. Thanks you for reply. I think I might just do new icons. 😁 Themers gonna theme 😁

rncbc's picture

best reply this year ever, so far! #)


Welcome to customization :).

For me to be able to customize the UI, because it is part of the creative experience. Especially on a music show. (I also personalize my physical musical instruments).

In an image program, you create images, and therefore you want a visual environment with symbolic icons that is as neutral as possible, that does not contaminate the image you are creating.

In a text program you create concepts, so even icons are unnecessary there.

But music is emotional, and having a visual style that matches what you're trying to convey emotionally is helpful. It is no coincidence that the most elaborate, different, disruptive and innovative interfaces are found in musical software, (DAWs, synths, plugins...)
Sometimes calling on the tactile and physical world, visually emulating analog instruments and tools. Others building symbolic interfaces.

Thus one feels immersed in different environments, a recording studio, or in a band's garage, in a concert hall, on a conceptual plane with waves and pure colors of electronic music, etc.

Going back to Qtractor and QSS.
There are things that we cannot modify, and others that, although we can touch with QSS, it is not recommended because we lose functionalities.

For example, it is possible to change the backgrounds on the mixer tracks (create other gradients etc). However if you do this, you lose the functionality of highlighting if you select the track in the sequencer. If the mixer tracks had a "selected" state, it could be done, but I don't know if that state can be created for that specific Widget.

"TrackList" could be customizable if the list items were independent Widgets.
I don't know the complexity of making this possible.

Something similar happens with the track "color list" selector. It is a QComboBox type element. If you customize the generic properties of the QComboBox, it will also affect this one, and it may stop working as expected.

Do we have limitations? Yeah. It is logical, programs are not created to be customizable, but functional and efficient.
And all of us who use Qtractor as a DAW do so because both in terms of performance and ease of creating and applying workflows, it is a masterpiece.

Summarizing all the spiel I've given:
Within the limits there is much that can be done. :)

rncbc's picture

dunno if it matters here but, before the subject comes aloft, here goes my take:

an interesting reading, almost one decade old already:

_skeuecrapism_ must die, in pain :)

ps. wth is that File/Save icon anyway? X)

The article you share is interesting. Discovering that the mixing console was consolidated in 1970, somewhat before I was born, has impressed me.
I will comment on some points about all of this.

"dunno if it matters here but, before the subject comes aloft, here goes my take:"

Of course it matters.
Why does this topic exist in this forum?
Why customize?
Is it just an aesthetic whim?

No. There are deep-rooted reasons why personalization makes sense.
Let's say it is a method to achieve ergonomics that transcends the physical.
It is getting the emotional and mental into the relationship.
It is making the tool yours, which fits with your being and intentions.

It is rare that a craftsman does not end up building or modifying his own tools.
Creating or adapting your own tools is part of the creative process.
Computer programs are still tools. Conceptual tools that require a physical interface.
That is touched on in the article you share, and I will return to the topic later on the hardware point.

"beyond skeuomorphism..."
skeuomorphism Yes or no?
There is no one solution, but infinite ones.

We live in a social proposal that is imposed on us and teaches us from a young age that there is only one correct option.
For each option, a side must be created to go to "war."
That the options must fight among themselves until the winner is left.
And that unified winning tendency must govern globally.

It is a false approach, which has more to do with psychopathic thinking than with human thinking.
It is not a human thought, if humans follow it it is only because it is instilled in us from birth.
We are born into a brainwashed environment.

But that is not freedom. And here we are in a free software framework.

There is no one solution, but infinite ones.
If it makes sense to fulfill a specific and correct purpose, it is a solution.

Many complain about Linux fragmentation. They do not realize that fragmentation is implicit in freedom.
True, it makes the learning curve more difficult, but in exchange it gives much more knowledge.

There will be those who need skeuomorphism in their tool, for purposes of historical memory, didacticism, nostalgia, continuity with workflows already learned, etc.
And not in all of his tools, but only in those that skeuomorphism makes sense to him.

And there will also be those who never make sense of skeuomorphism, because it has no place in their way of creating.

Both cases can be correct

_3 Productivity
The social proposal that I indicated before also says that you have to produce a lot.
That what is produced and the way in which it is produced must satisfy the demands of an industry, and not of the artist.
That what is produced must be consumable, without importing the real value of what is produced.
(If it intellectually or emotionally enriches the creator, or the recipient, it is completely useless for the social proposal).

Unfortunately, the trends referred to above are set by software multinationals. And those tencencies end up being the main reference.

In a free model, the value of a creation is linked to the real physical, emotional and intellectual good it provides.

So I think we should start having our purposes as our only reference.
And perhaps we should begin to consider customization as an essential functionality in the development of any free software.
That is, not only being able to modify it, but also allowing high interface customization without having to modify the core of the code.

Because customizing the tool is a natural part of the creative process.
Returning to the metaphor of war. A valid approach should not reign globally.
It is necessary to make it easier for any valid approach to be expressed. That is implicit in a free relational model.

_4 Hardware, physical and software interfaces.

No matter how much they try to insist, the "touch" tablet format is a failure.
It is a good complement, but imprecise for elaborate work.
Nobody uses them as a main tool, nor will they use them. It's imprecise.
The mouse has a precision of one pixel. You couldn't be more precise.

A finger at most has a precision of 50px x 50px. Click detections can be erratic. Not seeing the cursor doesn't help either.
Using a mixing app as a midi interface to control Qtractor can be useful, but you lose the feel of a real mixing console.

They call it touch, because you send information through touch, but you don't receive any touch feedback.
On the other hand, with the mouse (without entering a physical mixing console), you send information through touch.
By pressing or rolling the wheel, you receive the physical information from the button and the wheel.
We should change the name, because the mouse is more tactile than the tablet.

The electronic pen for tablets is not a solution either, because although it is precise for tracing, it is imprecise for clicking.
If you don't control the pressure you can make double or triple clicks, when what you intended was to drag.
You have to put on a "glove" if you don't want false clicks with the palm, etc.
The tactile sensation on the screen is unpleasant. Similar to the squeaking of a stone on a slate.
Much more subtle, of course, but there is that very subtle and irritating background sensation.

It is curious that he got it right the first time with the mouse, for now, it is irreplaceable.

Virtual reality glasses, presence detectors?
No. That they don't find out. We are sensitive beings and we underestimate touch. To interact we need to touch a physical object.

There are those who are incapable of writing on a keyboard if it is not spring-based, with its characteristic touch and sound.

It is evident that as a tool, glasses, tablets and other attempts to eliminate the tactile experience with the physical world do not work.
Those who develop these technologies know it. So perhaps its intention is not to provide new tools, but rather to desperately try to detach ourselves from the physical world.

_5 Artificial intelligence

Artificial intelligence is not mentioned in the article, because at that time it was not yet evident.
I'm just saying, what's the point of something creating music for me?
Will that music enrich me intellectually and emotionally? No. You just have to see the results with images.
Technically spectacular, but at the same time empty, disturbing and sordid.
My intention is to enjoy the experience of creating music myself.

If I want to listen to music that I haven't made, I don't need artificial intelligence.
Millions of humans created, create and will create excellent music to enrich me emotionally and intellectually.

Music is communication. What do I contact if it is generated by AI?

Artificial intelligence is a useless fireworks.

6_ Concluding:
Skeuomorphism can also make sense.
It is necessary to make it easier for any valid approach to be expressed. That is implicit in a free relational model.

KOSAI's picture

It's ok. I'll just stick with REAPER. It's has nice themes.

A lot of UI elements of qtractor are inside cpp files.
I do not dare to change cpp codes. Uhh...actually...I did. But it's just for fun.
I just wanna know how much I can do using QSS only.

UI designs and color is taste. Everyone have different taste.
For me, personally...I perfer clean and modern looking theme.

I'm not even a Musician. By the way.
I'm a 3D, CGI guy. I just a bit tired...mentally...lately.

So uhmm...I take a break form 3D and Design works and I play around with music for about a week.
And I end up designing a UI concept for a software. 😄


Add new comment