• Sick Day

    Woke up before dawn this morning with heartburn, a headache, and a lot of congestion. I guess I have a cold. I didn’t really want to call (read: email) out of work, because it’s Friday, which meant I would be missing the weekly software meeting. This week the SW group was reviewing and discussing the Google C++ Style Guide as part of a recent effort to improve process and communication.

    Also on the meeting’s docket was going over the first chapter of a book called Effective C++. The book is broken into 55 smaller “items”, each one dealing with a small and specific concept in C++. I was looking forward to what some people at the office have been calling “Book Club”, but, alas, too sick to work.

    Maybe that’s not totally true–I could’ve popped some ibuprofen, driven to the office, and tried to stem the flow of nose-leakage for nine hours. But I really wanted to just stay in bed, and so I emailed my boss to give him the news. I rationalized this decision by acknowledging that even if I had gone to work, I probably would’ve been only slightly better than useless, and I would also run the risk of getting somebody else sick. If I were to infect a principal engineer with my cold, and he then had to take a sick day…well, that would be far more expensive for the company. So, you see, it was really in my employer’s best interest that I stayed home to enjoy the amazing weather nurse a cold.


  • Converting a QFrame to a QWidget

    I had spent the better part of yesterday building, integrating, and testing a Qt form that was a single panel on a larger display. This morning I was tasked to “make it a popup” instead.

    The back-end to the GUI was a C++ class that inherited a custom SubFrame object, which inherits Qt’s QFrame object. My company also has a custom Popup class. Very similar to SubFrame, the Popup class, notably, inherits instead from a QWidget.

    I made the appropriate edits to my source code so that MyFormThing inherited Popup instead of SubFrame. It didn’t build, though. The setupUi() method in the Qt-generated Ui file expected a QFrame * input parameter, but from MyFormThing I was passing this to the method—this now being a QWidget *. My GUI, as far as the .ui file went, was still a QFrame. It needed to be a QWidget.

    Simply casting the QWidget to a QFrame won’t work, since a QWidget is a not a QFrame. This:

    ui->setupUi(dynamic_cast<QFrame *>(this));

    will build, but it will not run very far—the messed up dynamic cast throws an exception and a core dump is born.

    I knew I needed to change the .ui file, somehow, to make my QFrame a QWidget. Qt Creator doesn’t, AFAIK, give the ability to do this kind of morph—at least not in version 1.3.1, which is what’s installed on our lab computers. And obviously I wasn’t going to rebuild the whole thing from scratch starting with a QWidget base. Some quick Googling led me here.

    The .ui files in Qt are just XML. Near the top of the MyFormThing.ui file, I found this:

    <widget class="QFrame" name="MyFormThing">
    <property name="frameShape">
        <enum>QFrame::WinPanel</enum>
    </property>
    <property name="frameShadow">
       <enum>QFrame::Raised</enum>
    </property>

    So I changed class="QFrame" to class="QWidget", deleted the frame-specific properties, and rebuilt/ran without issue. When I inspected the GUI element in Qt Creator’s Form Designer, it said it was a QWidget, so it looks like that worked.

    tl;dr Change a QFrame into a QWidget by directly editing the XML in the .ui files.

     


  • This Site Needs Infinitely More GIFs

    Today I set up this website. This blog section here was a Wordpress install–v straightforward. The rest of the site, which I haven’t thought much about yet, is currently just the HTML5 Boilerplate template.

    I also set up a Git repository and a locally hosted copy of the site (MAMP ilu). I haven’t used Git that much, but the commands are similar to SVN. Also spent some time live-chatting the hosting company’s tech support to set up SSH access to the server.

    Eventually, this blog will be a place where I can talk about CS and programming-related things. While I’m here, let’s see how code looks with this theme:

    git init printf("Hello cruel world\n");

    I have a vague sense that the landing page of my site will just be a glorified ‘About’ page with a bunch of links to different hosted projects. I like having this lil website. Hi.


  • First Post

    Hello. Eventually there will be some content here. Thanks for visiting :)