Qt 5.0 Released 161
sfcrazy writes "The Qt project and Digia, the company behind Qt framework, have released the most awaited C++ framework for developers, Qt 5.0. The company claims it's one of the best releases to date and has invested a significant amount of time behind this release. It's an overhaul of the Qt 4.x series and makes Qt fit for the future."
Update: 12/19 17:46 GMT by U L : Major new features include an overhauled graphics layer, full integration of Qt Quick for creating flexible interfaces using Javascript, and increased modularization including the first steps toward de-emphasizing QtWidgets by separating them into their own module.
C++ Standards (Score:4, Interesting)
Re: (Score:2)
Re: (Score:2)
They aren't eliminating MOC. For one thing, they support a number of compilers that don't have and probably never will have full C++11 support.
Re: (Score:2)
You don't need C++11 to replace MOC. MOC was obsoleted by C++ features many years ago.
Re: (Score:2, Informative)
Let me add that In this particular instance, many is 15 years.
Re: (Score:2)
Let me add that In this particular instance, many is 15 years.
How do you call a C++ method by it's name from QML or javascript or C++ plugin without some kind of pre-prosessing step which actually stores the method names and argument types somehow to make invocation possible?
Re: (Score:2)
dlsym(h, "my_method")
There is no need to store it, it's already in the symbol table.
If you do want to store it, there is no need to use an external preprocessor anyway.
Re: (Score:2)
dlsym(h, "my_method") There is no need to store it, it's already in the symbol table.
If you do want to store it, there is no need to use an external preprocessor anyway.
That works for functions, but not Class Methods that require an instance of the class. And, even more so, how do you do it in a multi-platform environment in a uniform way? (http://en.wikipedia.org/wiki/Dynamic_loading). Windows doesn't use dlopen/dlsym/dlclose but has its own Win32 functions to do something similar. You're also relying on RTTI; and not every compiler or environment supported by Qt supports RTTI. (RTTI also has its own run-time overhead which is bad in embedded environments like what Qt sup
Re: (Score:2)
It works for any symbol, regardless of its type.
This has nothing to do with RTTI.
The API for plug-ins is platform-specific since there is no standard interface for C++ plug-ins.
Re:C++ Standards (Score:5, Informative)
It works for any symbol, regardless of its type. This has nothing to do with RTTI.
The API for plug-ins is platform-specific since there is no standard interface for C++ plug-ins.
Yes, you could use dlsym() when building the table MOC builds for the connector calls. That's it. That's also a very very small part of what MOC does. That could be done as part of the object constructor...except now you need to store both static compile-time information (the functions you want to add) and dynamic run-time information instead of just the static compile time stuff that MOC generates (in the moc_*.cpp files).
RTTI does a good bit of the rest of what MOC does. In neither case are they both supported by all platform+compiler combinations that Qt supports.
Qt5 now allows C++11 lambas in signal/slots; but only if you enable C++11 functionality when you build it - they still support compilers that don't support C++11 lambas.
Re: (Score:2)
It works for any symbol, regardless of its type.
You're still missing the point. How exactly, given a QObject*, can you ask it to give you some wrapper encapsulating a method named "foo"? Even if you're willing to do C++ name mangling yourself in a platform-specific way, you still need to know the actual type of the object to which you have the pointer, meaning that you need RTTI.
Re: (Score:2)
The problem is that the moc implements something more like the Common Lisp Object System's metaobject protocol for C++; resolving symbols at runtime is a tiny portion of what it does. dlsym and analogues on other platforms are also horrendously unsafe; a one way ticket to strange segfault bugs when you cast the result to the wrong type. And since C/C++ types are not first class, you can't even construct the casts at runtime! (Ok, maybe C++11 has some new foo_cast template, I'll admit my C++ is a bit rusty).
Re: (Score:2)
I simply replied to the question "how do you call a C++ method by its name from a C++ plugin".
I don't see what this has to do with MOC.
There is no need to build any table either. There is no need to store anything, nor to use RTTI.
If you really wanted to generate tables of data (which again, I repeat, is not needed to do this), you still wouldn't need MOC anyway. You can just use macros and potentially templates to do that.
Re: (Score:2)
Calling a member function through a pointer to base bound to a derived object works fine assuming the function is virtual.
Re: (Score:2)
It does work in all cases.
Re: (Score:2)
If you want to do duck typing, which is probably a bad idea, you'll indeed need to generate some runtime reflection data.
I don't see how generating that data is awkward using standard mechanisms.
Re: (Score:2)
It does work in all cases.
Only for functions, not for non-static class members; and (as I pointed out) not efficiently enough for how Qt manages signals/slots; not likely sufficiently enough for how Boost handles them either.
Re: (Score:2)
It works fine for any symbol, including non-static class members or whatever else you've put in your binary. dlsym does not care about the type of the symbol or the calling convention to call it, that's up to you to handle.
Now then, what you can argue is that this isn't a nice programming interface. It isn't, it's just how the platform does dynamic linking.
Re: (Score:2)
Now then, what you can argue is that this isn't a nice programming interface. It isn't, it's just how the platform does dynamic linking.
It's also not portable. dlopen()/etc are not on Windows - which has its own unique interface for doing the same thing.
Re: (Score:2)
dlsym(h, "my_method")
There is no need to store it, it's already in the symbol table.
If you do want to store it, there is no need to use an external preprocessor anyway.
Sorry, wrong answer. C++ method name symbols are mangled to include class name and parameters. Worse, this mangling is not standardized, it is compiler specific. In other words, that is not a method name, that is a C function name in the example you gave.
But it's even worse than just generating the symbol name. With virtual methods, you have to determine at runtime, what is the real class of the object pointer, because you need to call differently named method based on that. So, could be done with RTTI and
Re: (Score:2)
It's a symbol name. Finding the symbol name of a particular member function is not a problem. You don't need the type either, the base type is enough.
Re:C++ Standards (Score:5, Informative)
Yes and no. The signals and slots mechanism is still there and it's still using moc, but there's a new connection syntax available that's a lot more C++ like, allows C++11 lambdas in place of slots, and offers compile-time checking of connections that previously would just fail at run time. Won't please the purists, but it's a step in the right direction.
Re: (Score:2)
Yes, they did. See the wiki page [qt-project.org].
Signals and slots (Score:5, Informative)
You can now use any C++ function as the target of a signal using the new QObject::connect() syntax. This is a huge win because with the new syntax the compiler and linker can check that the connections are valid instead missed connections just causing a run-time error.
The moc preprocessor is still required for QObject derived classes, mostly for the translation framework and also to provide support for the old signal/slot syntax which is still allowed. Qt5 doesn't require a C++11 compliant compiler, which is a good thing since there aren't yet any fully compliant compilers. I'm sure if there is a Qt6 it will require C++11 and use those features.
Some of the really cool C++11 features like move constructors aren't necessary with Qt because it's containers implement reference counted copy-on-write, so when you assign a QMap from another QMap no copy is made, and if the old QMap was an rvalue then there is never a need for the copy to be made when the new QMap is modified. One of the big improvements Qt4 made over Qt3 was to make container assignment atomic so this mechanism worked with threaded code and defensive deep copies weren't necessary anymore.
Re: (Score:3)
Qt5 doesn't require a C++11 compliant compiler, which is a good thing since there aren't yet any fully compliant compilers. I'm sure if there is a Qt6 it will require C++11 and use those features.
C++11 is not necessary for MOC-less signals/slots - Boost has been offering them for years with all existing compilers.
Some of the really cool C++11 features like move constructors aren't necessary with Qt because it's containers implement reference counted copy-on-write, so when you assign a QMap from another QMap no copy is made
Sure, but what about your own types? Implementing COW is much harder than implementing a move constructor. I do hope that Qt containers use move semantics for elements when available, at least?
Also, COW is not free when it's thread-safe. Those atomic increments and decrements do add up, especially on instances of types that are copied around a lot (strings are a classic example of that).
Re: (Score:2)
Sure, but what about your own types? Implementing COW is much harder than implementing a move constructor.
In case you are genuinely interested, it's not hard, because there's a helper class for that: QSharedDataPointer [qt-project.org]
Re: (Score:2)
That helps. On the other hand, if you use that trick (copying pointer to actual data around), you get the overhead of an extra indirection on every field access, as well as a heap allocation for every instantiated obejct (even if it's instantiated on stack). As I understand, Qt pretty much has to do it anyway for its classes to enable binary compatibility between minor releases via the usual Pimpl idiom, but it's not necessarily desirable for user classes.
Re:C++ Standards (Score:4, Informative)
First, it's not bastardized. C++11 is the bastardization, because it results in code fragmentation. That wonderful cross platform C++11 function you write can only be targeted by C++11 compilers. Meanwhile in Qt land everything keeps working on your legacy compiler. The fact that it uses compiler macros to accomplish cross-platform cross-compiler interoperability does not lend itself to "bastardization"
MOC is not ugly, though I would prefer a C# approach of not having to separate it into a H file, but this is more a C++ thing than a Qt thing. I love the QMeta* that allows me to have introsepction at run time (again x-platform) and I can even dynamically create classes. Can C++11 do that? (Well i guess it can if it's using Qt) But they are adding C++11 syntax if you are using a C++11 compiler and want to limit your portability.
Re: (Score:2)
Can you explain what Qt slots/signals give you (apart from the need to do extra preprocessing) that Boost.Signal does not?
Re: (Score:2)
Qt signals are modeled after boost signals. I can't say what other than syntax is different (Qt begin easier to read), but signals/slots are supported in all paradigms - PyQt/PySide, QtQuick (JavaScript) and in threads. I don't think Boost has support for JS and Python. Functionally though, they are the same.
http://www.richelbilderbeek.nl/CppFromQtSignalToBoostSignal.htm [richelbilderbeek.nl]
Re: (Score:2)
Qt signals are modeled after boost signals.
That would be impossible, given that Qt signals appeared much earlier than Boost.Signals. Indeed, I don't think Boost itself existed at that time - the effort for that began in 1998, while the first release of Qt was in 1992 (and, if I remember correctly, it had signals/slots since inception).
can't say what other than syntax is different (Qt begin easier to read),
Boost.Signals is a pure C++ solution that relies on templates and does not need any kind of preprocessor. It works out of the box on vast majority of C++ compilers, including g++ and MSVC.
I don't think Boost has support for JS and Python.
Well, Boost is a C++ library.
Re: (Score:2)
I don't think Boost has support for JS and Python.
Well, Boost is a C++ library. That said, you don't really need any special support for signals in JS or Python, because they already have functions as first-class types.
I think he meant, he doesn't think it's easy to create bindings for emitting Boost signals from javascript or Python, like you can do from javascript engine running in Qt app, or from PySide/PyQt application.
While this doesn't make sense for Boost alone, without context, it becomes relevant and even critical, if you have a library/framework using Boost as core signal/slot mechanism. If you do that, how easy is it to emit such signals from an interpreted language? Or, to put it other way, are Boost signals a
Re: (Score:2)
Well, Boost signals are just function objects. So long as whatever bridge you use to call C++ from a scripting language lets you invoke operator() on arbitrary stuff, it can emit a signal. I think Boost.Python would be able to do that, for example.
KDE5? (Score:2)
Re: (Score:2)
Re: (Score:2)
A glorious day (Score:5, Insightful)
This really is the best cross-platform Apps framework out there. Far better than HTML5/Javascript.
Re: (Score:2)
Plus all these things are designed for webapps that run in a browser. Qt is for desktop apps. Comparing them is just stupid.
Re: (Score:2)
I doubt it. Qt is nice but depending on what's being developed, HTML5/JavaScript can be the superior solution.
I think there are very few different cases where HTML5+JavaScript is superior. Online cloud-backed apps running in browsers are obviously one case, removing the need for separate download, and on native side there's the case where HTML+JS is the only alternative supported by all platforms where the application needs to run...
But HTML (any XML) is klunky compared to QML if you want to go the declarative route, and for "real applications" like the much-mentioned Autodesk Maya, they're not even competing becau
standard compliance? (Score:2)
So, is it fully standard C++ now or do you still have to use their hokey preprocessor?
Re: (Score:2, Informative)
It's still a moc'ery of C++, if that's what you're asking.
And it still duplicates everything that's in the standard library, including containers, threads, files, etc.
Re: (Score:2)
Fixed this for you:
And it still duplicates everything that's NOW in the standard library, including containers, threads, files, etc. for the set of compilers and run times that are compliant.
Re: (Score:3)
Re: (Score:2)
So, is it fully standard C++ now or do you still have to use their hokey preprocessor?
Well, for many things Qt requires reflection features not provided with C++. When/if C++ starts to provide them as part of the language, I'm sure moc will become thing of the past, and be replaced with just translation data extractor, which you can leave out if you do not care about internationalization. But for what it's worth, with the new signal-slot connect syntax it's probably possible to have meaningful programs without running moc, if that makes someone happy.
Re: (Score:2)
So, is it fully standard C++ now or do you still have to use their hokey preprocessor?
Qt is, and always has been fully standard C++. The "moc" program is not a preprocessor, is just a tool, more precisely, just a code generator that writes for you some files that you have to either include at the end of your ".cpp" or you have to compile and link like other hand-coded files. If you use QMake, or CMake or any other buildsystem that has some Qt support (and most do), is completely effortless.
At a first glance, you see things that might look like an extension to the language, because you see st
Re: (Score:3)
How exactly the magic Qt keywords like "slots" is implemented is really an implementation detail. From programmer's perspective, they are language extensions, because they introduce some new and important semantics into the language. The fact that they're handled by a separate codegen tool and stripped out of the code that's fed to the C++ compiler is irrelevant - you could just as well implement them directly in the compiler without changing their meaning, and it wouldn't magically change what they are.
Any
Re: (Score:2)
Yes, luckily good things like Qt didn't change, but unfortunately bad things like bashing Qt without making any point, and spreading misinformation (e.g. telling MOC is a preprocessor) didn't either.
How is Qt Quick? (Score:4, Interesting)
I used Qt Quick briefly. It seems like you get a lot of deep powerful customization, but that comes at a cost. It eventually pissed me off so I went back to QWidget, and my productivity soared.
I would not have completed my project in a reasonable time using Qt Quick. It is not "quick". Sometimes, you just want to drop tables, check boxes, buttons, etc. on to your main window, tie the click event to a slot, and call it done. You are fine with whatever default styling and rendering that Qt and the OS decide is appropriate for the widget's click/hover/etc event.
It seems with Qt Quick, you have to specify all that nonsense. Plus, the Qt Quick editor tool felt complex and confusing. I avoided it and did everything by hand. Qt Designer for QWidgets is a drag-n-drop breeze. I even got my manager on board after he saw me using it. He is an EE, and he really likes it. He is used to spending $500 on Visual Studio Pro to what Qt Designer does better for free.
Maybe I just needed to study Qt Quick more to get past the learning curve, but I knew how to do it the widget way, and I wanted the project done.
Has anybody had success migrating their project from QWidgets to Qt Quick? Unless I see a strong compelling reason, I am sticking with QWidgets. It works really well for me.
Re: (Score:2)
My understanding is that the big problem with Qt Quick is the lack of all the usual widgets. There really isn't any particular reason why you shouldn't be able to define QML graphs in terms of "I want this button here and this textbox there", and them assuming the default theme etc.
Re: (Score:3)
You may find yourself pulling up Qt Quick for implementing a "find dialog" or a "insert criteria dialog",
Re: (Score:2)
Has anybody had success migrating their project from QWidgets to Qt Quick? Unless I see a strong compelling reason, I am sticking with QWidgets. It works really well for me.
For an existing project, I think the only compelling reason would be, if you want a bling-bling GUI for touch interaction. Think of flick scrolling, multi-finger zoom&pan, animated transitions. And then it would need to be a complete UI redesign.
But, in 1-2 years, I think almost all new displays even on desktop, and certainly on laptops, will be touch screens. I think this is a good time to start thinking about a full UI re-design for any application, where displaying information is important.
Re: (Score:2)
Re:A good example of a bad summary (Score:4, Insightful)
Oh right, this is slashdot.
But it's not even like you have to read anything. It's a video demonstration.
Re: (Score:2)
If you don't know exactly what QT is/does since the first time you compiled it in order to run kvirc back in 1998... Then I don't know what you are even doing here.
Re:A good example of a bad summary (Score:5, Insightful)
If you didn't already know what Qt was, then you're probably not going to be particularly interested that version 5.0 is out.
Re: (Score:2)
this is awful editting
That doesn't sound right coming from a person spelling "editing" wrong.
Re: (Score:2)
As someone who's been on Slashdot since the 90s, I think you're tilting at windmills. When was the last time you saw a really good summary on Slashdot? Shitty summaries are the norm here, and they're frequently downright misleading and contradicted by the articles linked. There is NO editorial control here, just sensationalism.
Re:A good example of a bad summary (Score:5, Insightful)
... hence thousands of non-programmers continue to talk about how superior it is to GTK+
Having done a small amount of Qt programming, it's also one of the most pleasant APIs I've worked with, both in its C++ form and in PyQt.
Re: (Score:2)
I haven't tried to code something like this, but you should check out how Veusz [gna.org] does it, because it works perfectly.
Re: (Score:2)
Speak for yourself. Some of us have multiple monitor setups, e.g. 1 in landscape, 1 in portrait. The ability to dynamically attach/detach tabs as separate windows is very handy. IDEs and web browsers make use of this feature.
Re: (Score:3)
That seems like totally valid criticism to me. So you're saying Qt is equal or inferior in all respects, and uses more resources? You should blog about this, because no amount of googling turns up remotely similar results. As a matter of fact, people seem to be quite happy with Qt, and "shinyness" doesn't even get mentioned in those discussions. Or is shiny just code for "not as fugly" .. ? Please elaborate.
Re: (Score:2)
I know that... I was essentially asking to be trolled some more :D
Re: (Score:2)
Re: (Score:2, Informative)
You obviously never programmed with QT then. QT API is generally pleasant to work with in that it's well documented, consistent, and not unnecessarily complex with a decent amount of examples.
QT is a larger framework because it does quite a bit more then GTK+ and others. In a Linux environment, that ram usage is shared so you can end up using much less ram in the end with multiple programs running on the same large library. This unfortunately is less of an advantage in Windows (where you see much less GTK+
Re: (Score:2)
Re:A good example of a bad summary (Score:5, Funny)
Even worse, I don't know what "C++" or "project mean"!
Re: (Score:3)
It is not is such a unreasonable thing as to assume basic knowledge of the field. This is a site predominantly amid at compsci people and largely open source/*nix people at that. Knowing what qt is or the ability to find out on your own what qt is, is not unreasonable here. If you think they should have give you a definition of qt then why not ask for a definition for C++ as well as that would be just as nonsensical in this context.
Re: (Score:3)
How is Qt still relevant? (Score:5, Informative)
Re: (Score:2)
Is it actually used on the Kindle? The only Qt-on-Kindle project I know of was an unofficial port [google.com] which was abandoned by the maintainer two years ago.
Re:How is Qt still relevant? (Score:4, Informative)
Re: (Score:2)
You're right. (Score:3)
Re:How is Qt still relevant? (Score:5, Informative)
Re: (Score:3)
It's the framework for KDE, which is the excellent, fast UI environment I use on my Linux rigs. Apparently a huge number of other projects either use it currently, or have used it in the past, including a number of well-known projects: Amazon Kindle, Google Earth, Adobe Photoshop, MythTV, Rosegarden, Skype, Virtualbox, VLC media player.
...Anki, Opera, Calibre, Stellarium, Krita...
Re: (Score:3)
The 'Burning platforms' memo killed off Nokia's Qt deployment but 2013 will see 3 offerings:
- KDE Plasma Active running on Vivaldi
- Sailfish running on Jolla phones
- BB10 running on RIM phones
(Not to mention Canonical targeting 12.04 on Nexus 7 - Kubuntu on your tablet!)
So QML ain't extinct; it's just hibernating.
Re:How? (Score:5, Insightful)
Re: (Score:2)
One framework to rule them all
But for Android and iOS support, we'll have to wait until late 2013.
Re: (Score:2)
For support, kinda. But you can already deploy for android with necessitas.
Re: (Score:3)
Hey, several of my favoruite Windows apps are in Qt (e.g. from my WinXP days: "Launchy", and current versions of TweetDeck and Calibre).
Qt-on-Windows runtime installs much like the Visual C++ runtime, and that, for me, is preferable over any app done in Java/Perl/Python, as I don't have to clutter up my system with RTEs (that are all too often supporting a single app)
...and not one annoying "time to update your runtime... AGAIN" ... ever!
Re:How? (Score:5, Informative)
How is Qt still relevant?
Let's see...
It's the only multi-platform development kit that is really as feature complete as most platforms.
It runs on more devices than you'd ever imagine - from small embedded devices to your kitchen appliances to mobile devices to desktops and servers.
It's what KDE is built on.
It's what MeeGo/Mer/Tizen/Sailfish are built on.
It's what Blackberry 10 (BB10) is built on.
AutoDesk is built on it.
CiscoVPN is built on it (well, a really old version at least).
There's plenty more out there; but I'm going to stop there.
Re: (Score:2, Insightful)
He probably means that because the brain damage management at Nokia couldn't get it going on a phone that it's doomed. Android and Apple won and if you buy into the "Desktop is Dead" idiocy then you think that mobile is the only target that matters. We won't tell the fuck head that 9 out of 10 times those "Desktop is Dead" articles are viewed from a desktop. It's confusing to them. No those are real numbers. Go look at all the sites you use to decide who's winning the browser war. They may disagree on
Re: (Score:3)
It's email (I'm resisting the temptation to finish that setence with "stupid", because you really doesn't deserve that label).
People use smartphones for email and things similar to it, like twiter and facebook updates. Not for the web, not for complex work, but for communication.
I used to think it was just me, but then, all the studies I've seen recently abo
Re:I use it so it's relevant to me. (Score:4, Informative)
Re:I use it so it's relevant to me. (Score:4, Informative)
It's mature and has all the bells and whistles. Only other alternative is WxWidgets...
What else did you have in mind ?
Here's the basic group that Qt belongs as part of:
WxWidgets is public domain; and was the first (AFAIK) to do both Signals/Slots and Message Maps for inter-object comms.
Gtk was originally just MessageMaps, and now also does Signals/Slots; but it also tends to be heavily GNOME centric and rather largely ignored by GNOME in maintaining it - it moves along, but at a snails pace because they're not really paying attention to it (to my understanding from talking to someone in the GNOME community).
SDL isn't quite as feature complete as any of the others, but can get the job done.
Qt is really the only first class library in that group, and now reaches even more platforms than ever before. And with Qt embedded, it runs in many devices that you may never have thought of as having run Qt (Microwaves, TVs, Refrigerators, etc.). Qt really is to multi-platform development what Linux is to processors in that respect.
So in the sense that nothing else is really as feature complete and professional as Qt - yes, it's in its own category. But in reality there are several other major competitors - and all from the FLOSS community at that.
Re:I use it so it's relevant to me. (Score:5, Informative)
Small correction: wxWidgets isn't public domain. It's licensed under the wxWindows Licence which, as their page states, is like the LGPL but with a few differences.
Re: (Score:3)
Small correction: wxWidgets isn't public domain. It's licensed under the wxWindows Licence which, as their page states, is like the LGPL but with a few differences.
Interesting. I hadn't looked at in in a few years (2004,2005). So they've changed their license since it use to be public domain. I was surprised at the time, but oh well. Good to see them using a nicer license though.
Comment removed (Score:5, Informative)
Re: (Score:3)
The standard xinput mechanisms have full tablet support now. You can even use use cheap knockoff tablets now thanks to digimend [sourceforge.net] (I got one from monoprice and it's pretty great for messing around with handwriting recognition and I've discovered that image editing with a trackball + tablet is great). Unfortunately all tablets are kind of broken except in the latest release of X.org because of a bug with coordinate transformations (basically, the pointer jumps if you make pressure changes without moving becaus
Re: (Score:2)
Re: (Score:3)
Re: (Score:3)
You mean to tell me that the old version of Qt were unfit?
Apparently it had far too little buzzword-compliance with their traditional widget-based imperative style GUI, now it's HTML/CSS/Javascript and declarative style GUI that is the "hot thing". I guess the good side is that it's like writing a web app that many developers know how to do but it has pretty much all the bad sides too, personally I find it's a giant step backwards. Or rather if I was going to do it this way I'd probably just go for HTML+JQuery and make it run in a browser against a back-end inste
Re: (Score:2)
Declarative style GUI has been the "hot thing" for half a decade now.
And what's wrong about it? HTML5/JS is not bad because it's declarative. It's bad because HTML was never designed to lay out UI, and JS is just a quirky, horribly designed language. But do declarative UI with an expressive data binding framework, and use C++ (rather than JS) for the model, and it's beautiful.
Re: (Score:2)
It's an overhaul of the Qt 4.x series and makes Qt fit for the future.
You mean to tell me that the old version of Qt were unfit?
there is a large difference between unfit and not as fit as it could be.
Re: (Score:2)
It was unfit for the future, yes.
Re: (Score:2)
That's true of any product release by any company. The releaser is always going to make the claim that it's better than before. It's up to you, the consumer, to look at the product and make a decision. If you want to make an informed decision you'll probably need to look at both what its promoters and its detractors have to say about it. This article is obviously about the promotion side of the product. You may find some detractors in the comments but so far they're doing a piss poor job. You'll have t
Re: (Score:2)
I will add that I love their sidebar docking, floating, tabbing, etc (see Eric IDE for a good example).
Eric makes use of QScintilla.
Re: (Score:2)
Re: (Score:2)
Someone has probably already extended QTextEdit to make a drop-in widget that has better syntax highlighting. I know the same thing has been done for spell check.
Re: (Score:2)