Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Qt error: “Must construct a QApplication before a QWidget”
QtWS25 Last Chance

Qt error: “Must construct a QApplication before a QWidget”

Scheduled Pinned Locked Moved Solved Mobile and Embedded
9 Posts 4 Posters 6.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • MhM93M Offline
    MhM93M Offline
    MhM93
    wrote on last edited by
    #1

    Hi.
    I have a big project (with a lot of page widget that I cant copy all of them here).
    yesterday all of them work good. Today I change several pages that they do not have any errors. but when I run project write successful build, **but show me this error :

    Starting /home/hgh1/prj/TimeAssistant/1395-02/VS200/VS200/build-VS200-Desktop4_6-Debug/VS200...
    QWidget: Must construct a QApplication before a QPaintDevice
    The program has unexpectedly finished.
    /home/hgh1/prj/TimeAssistant/1395-02/VS200/VS200/build-VS200-Desktop4_6-Debug/VS200 crashed
    

    I changed all the code that I changed them today. but again show me this error.
    When I put break point in main.cpp in first line : Application a(argc,argv); this is not work and again show this error.(on Ubuntu Linux OS).

    I decide to copy step by step the classes and main.cpp and mainwindow.h .cpp .ui.
    but when I run project show me another strange error :

    /opt/DesktopQt4.8.6/include/QtGui/qtextformat.h:699: error: macro "border" requires 8 arguments, but only 1 given
         inline qreal border() const
    

    this line error is in qtextformat.h .
    or this error :

    /opt/DesktopQt4.8.6/include/QtGui/qgraphicsitem.h:347: error: variable or field 'scroll' declared void
         void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
              ^
    /opt/DesktopQt4.8.6/include/QtGui/qtextformat.h:700: error: expected unqualified-id before '{' token
         { return doubleProperty(FrameBorder); }
         ^
    

    H.Ghassami

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mvuori
      wrote on last edited by
      #2

      In technical terms: your code has a bug.

      You really should bring your source code exactly back to what it was when your app last worked.

      Try to be exact with your information and try to find the first point in the workflow when something fails. For example, problems in header files are raised during compiling, not when you run your app.

      And since the last ones are compiler errors, they could be anywhere in your application, but since your app actually executed before the last edits, and where you did the editing, you have or had a problem in the code that constructs you QApplication derived object or refers to it. Anyway, the problems should be in your .cpp files and nobody can know where, unless you show them.

      Note that if you only look at the Issues pane, you could find more information in the Compile Output pane.

      1 Reply Last reply
      0
      • Chris KawaC Offline
        Chris KawaC Offline
        Chris Kawa
        Lifetime Qt Champion
        wrote on last edited by
        #3

        The first error is common when you create a global static instance of a QObject derived class. It doesn't have to be static itself, just for example part of another static struct/class.
        The other errors look like either missing includes or include pollution i.e. something included before Qt defines some names that Qt uses.
        Beyond that - basically what @mvuori said - roll back to last working state (hopefully you used some version control system) and compare differences.

        1 Reply Last reply
        0
        • MhM93M Offline
          MhM93M Offline
          MhM93
          wrote on last edited by MhM93
          #4

          @mvuori : thanks for reply.
          @chris thanks. I dont have any global static variables. and also thanks for your advice to use version control. I should use it when my program run successfully.
          I can not bring back because I forget . :(
          there is nothing on Issues pane when build successfully.
          this is my project :
          DB --->class for database
          PortSerial----->config serial port
          inputpanel and inputpanelcontext ---> copy this project from this link
          those are my main class that they do not have any error.
          this is main.cpp:

          #include "mainwindow.h"
          #include <QApplication>
          #include "myinputpanelcontext.h"
          
          
          int main(int argc, char *argv[])
          {
              QApplication a(argc, argv);
              MyInputPanelContext *ic= new MyInputPanelContext; ;
              a.setInputContext(ic);
              MainWindow w;
              w.show();
              //w.showFullScreen();
          
              return a.exec();
          }
          

          mainwindow.h

          #ifndef MAINWINDOW_H
          #define MAINWINDOW_H
          
          #include <QMainWindow>
          #include <QTimer>
          #include <QDate>
          #include <QTime>
          #include "menu.h"
          #include <QMessageBox>
          #include <QSocketNotifier>
          #include "db.h"
          #include "portserial.h"
          #include "usermng.h"
          #include <QPaintDevice>
          #include <QPushButton>
          
          namespace Ui {
          class MainWindow;
          }
          
          class MainWindow : public QMainWindow
          {
              Q_OBJECT
          
          public:
              QTimer *timer ;
              DB *database;
              PortSerial *serialport;
              QSocketNotifier *notifier ;
              explicit MainWindow(QWidget *parent = 0);
              ~MainWindow();
          
          private slots:
               void ReadAndProcessData();
              void SetupUI();
              void SetButtonImage(QPushButton *btn,QString Path);
              void ShowTime();
              void on_btnMenu_clicked();
              void on_btnEnter_clicked();
              void on_btnShowFunctions_clicked();
          
          private:
              Ui::MainWindow *ui;
          };
          
          #endif // MAINWINDOW_H
          
          

          mainwindow.cpp

          
          #include "mainwindow.h"
          #include "ui_mainwindow.h"
          #include <QSound>
          #include <Qt/QtMultimedia>
          
          bool typing;
          bool showmenu;
          UserMng *mf;
          QMessageBox msg;
          QString msgerr;
          
          MainWindow::MainWindow(QWidget *parent) :
              QMainWindow(parent),
              ui(new Ui::MainWindow)
          {
              ui->setupUi(this);
              serialport=new PortSerial();
              database=new DB();
              serialport->openport();
              mf=NULL;
              /*set the timer*/
              timer=new QTimer(this);
              connect(timer, SIGNAL(timeout()), this, SLOT(ShowTime()));
              timer->start(1000);
              SetupUI();
              ui->lblDate->setText(QDate::currentDate().toString("yy/MM/dd"));
              typing=false;
              showmenu=false;
              ui->statusBar->addWidget(ui->lbl_text,0);
              ui->lbl_text->setText("the status of device");
              if(database->openConnection())
              {
                  notifier=new QSocketNotifier(serialport->fd, QSocketNotifier::Read,this);
                  notifier->setEnabled(true);
                  connect(this->notifier,SIGNAL(activated(int)),this,SLOT(ReadAndProcessData()));
              }
              else
                  ui->lbl_text->setText("the database can not open.");
          }
          
          MainWindow::~MainWindow()
          {
              delete ui;
          }
          //======================================
          //           Setup UI
          //======================================
          ///
          /// \brief MainWindow::SetupUI
          ///
          void MainWindow::SetupUI()
          {
              /*set transparent farem*/
                this->setStyleSheet("QMainWindow {background-image: url(1.jpg);background-repeat:no-repeat;background-position:center;}");
              //==============================================
              /*menu frame enter password*/
              ui->gbPassWord->setVisible(false);
              //ui->txtPassword->setEchoMode(QLineEdit::Password);
              //==============================================
              /*Set the image icon*/
               SetButtonImage(ui->btnMenu,"/pic/menu.png");
              //=============================================
              /*Set the menubar tool bar*/
              ui->mainToolBar->setVisible(false);
              ui->menuBar->setVisible(false);
              //=============================================
              ui->gbFunction->setGeometry(140,-150,431,201);
          }
          
          void MainWindow::SetButtonImage(QPushButton *btn,QString Path)
          {
              QString str=(qApp->applicationDirPath());
              str.append(Path);
              QPixmap pixmap(str);
              QIcon ButtonIcon(pixmap);
              btn->setIcon(ButtonIcon);
              btn->setIconSize(pixmap.rect().size());
          }
          
          
          
          void MainWindow::ShowTime()
          {
              QTime time = QTime::currentTime();
              QString text = time.toString("hh:mm");
              ui->lblTime->setText(text);;
          }
           /*Menu frame*/
          //============================================
          void MainWindow::on_btnMenu_clicked()
          {
              if(showmenu)
              {
                  showmenu=false;
                  ui->gbPassWord->setVisible(true);;
              }
              else
              {
                  showmenu=true;
                  ui->gbPassWord->setVisible(false);;
              }
          }
          //============================================
          void MainWindow::on_btnEnter_clicked()
          {
              if(ui->btnEnter->text()=="Enter password")
              {
                  if (ui->txtPassword->text()==database->CheckAttendant(ui->lbl_text->text()))
                  {
          //            database->InsertAttendant(ui->lbl_text->text());
          //              QSound::play("welcome.wav");//qApp->applicationDirPath() +
          //              ui->btnEnter->setText("Enter");
          //              ui->gbPassWord->hide();
                  }
                  else
                  {
                      msgerr="PASSWORD NOT ACCEPT!!!!!!.";
                      msg.setIcon(QMessageBox::Warning);
                      msg.setStandardButtons(QMessageBox::Ok);
                      msg.setText(msgerr);
                      msg.exec();
                      ui->btnEnter->setText("Enter");
                      ui->gbPassWord->hide();
                  }
              }
              else
              {
                  if(ui->txtPassword->text()=="1234")
                  {
                      ui->txtPassword->setText("");
                      menu *m=new menu;
                      m->showFullScreen();
                      //m->show();
                      //this->hide();
                  }
              }
          
          }
          //============================================
          void MainWindow::on_btnShowFunctions_clicked()
          {
              ui->gbFunction->setGeometry(140,210,431,201);
          }
          //============================================
          //                                      READ FROM CARD
          //============================================
          
          void MainWindow::ReadAndProcessData()
          {
              QString output;
              serialport->readcard(output);
          
              //menu* m;
              if(mf!=NULL)
              {
                  mf->processData(output);
              }
              else
              {
          
                  msgerr=database->CheckAttendant(output);
                  if (msgerr=="Error1")
                  {
                      msgerr="DataBase error occured.";
                      msg.setIcon(QMessageBox::Warning);
                      msg.setStandardButtons(QMessageBox::Ok);
                      msg.setText(msgerr);
                      msg.exec();
                  }
                  if (msgerr.length()==0)
                  {
                      //play sound this user have nou password
                      QSound::play("welcome.wav");//qApp->applicationDirPath() +
                      database->InsertAttendant(output);
                  }
                 if (msgerr.length()>0)
                  {
                      ui->gbPassWord->show();
                      ui->btnEnter->setText("Enter password");
                      ui->lbl_text->setText(output);
                  }
          
          
              }
          
              notifier->setEnabled(true);
          
          }
          
          
          

          mainwindow.ui

          <?xml version="1.0" encoding="UTF-8"?>
          <ui version="4.0">
           <class>MainWindow</class>
           <widget class="QMainWindow" name="MainWindow">
            <property name="geometry">
             <rect>
              <x>0</x>
              <y>0</y>
              <width>726</width>
              <height>469</height>
             </rect>
            </property>
            <property name="windowTitle">
             <string>MainWindow</string>
            </property>
            <property name="styleSheet">
             <string notr="true">color:white;font-size:12px;background-color:rgba(255,255,255,10);</string>
            </property>
            <widget class="QWidget" name="centralWidget">
             <widget class="QLabel" name="lblTime">
              <property name="geometry">
               <rect>
                <x>10</x>
                <y>110</y>
                <width>151</width>
                <height>17</height>
               </rect>
              </property>
              <property name="font">
               <font>
                <pointsize>-1</pointsize>
               </font>
              </property>
              <property name="styleSheet">
               <string notr="true">color:white;
          font-size:12px;</string>
              </property>
              <property name="text">
               <string>Time</string>
              </property>
             </widget>
             <widget class="QLabel" name="lblDate">
              <property name="geometry">
               <rect>
                <x>10</x>
                <y>140</y>
                <width>151</width>
                <height>17</height>
               </rect>
              </property>
              <property name="font">
               <font>
                <pointsize>-1</pointsize>
               </font>
              </property>
              <property name="styleSheet">
               <string notr="true">color:white;
          font-size:12px;</string>
              </property>
              <property name="text">
               <string>Date </string>
              </property>
             </widget>
             <widget class="QGroupBox" name="gbFunction">
              <property name="geometry">
               <rect>
                <x>140</x>
                <y>-150</y>
                <width>431</width>
                <height>201</height>
               </rect>
              </property>
              <property name="styleSheet">
               <string notr="true">QGroupBox{background-color:rgba(255,255,255,0.5);border-style:none;}
          QPushButton
          {
          background-color: #4CAF50; /* Green */
              border: none;
              color: white;
              padding: 5px 10px;
              text-align: center;
              text-decoration: none;
              font-size: 12px;
          }</string>
              </property>
              <property name="title">
               <string/>
              </property>
              <widget class="QPushButton" name="btnShowFunctions">
               <property name="geometry">
                <rect>
                 <x>0</x>
                 <y>160</y>
                 <width>431</width>
                 <height>41</height>
                </rect>
               </property>
               <property name="text">
                <string> Functions</string>
               </property>
              </widget>
              <widget class="QWidget" name="layoutWidget">
               <property name="geometry">
                <rect>
                 <x>30</x>
                 <y>10</y>
                 <width>371</width>
                 <height>131</height>
                </rect>
               </property>
               <layout class="QGridLayout" name="gridLayout_2">
                <item row="0" column="0">
                 <widget class="QPushButton" name="pushButton">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="0" column="1">
                 <widget class="QPushButton" name="pushButton_2">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="0" column="2">
                 <widget class="QPushButton" name="pushButton_3">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="0" column="3">
                 <widget class="QPushButton" name="pushButton_4">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="1" column="0">
                 <widget class="QPushButton" name="pushButton_5">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="1" column="1">
                 <widget class="QPushButton" name="pushButton_7">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="1" column="2">
                 <widget class="QPushButton" name="pushButton_8">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
                <item row="1" column="3">
                 <widget class="QPushButton" name="pushButton_6">
                  <property name="text">
                   <string>PushButton</string>
                  </property>
                 </widget>
                </item>
               </layout>
              </widget>
             </widget>
             <widget class="QGroupBox" name="gbPassWord">
              <property name="geometry">
               <rect>
                <x>140</x>
                <y>210</y>
                <width>431</width>
                <height>81</height>
               </rect>
              </property>
              <property name="styleSheet">
               <string notr="true">*{color:white;font-size:14px;}
          QLineEdit{
          background-color: #fff;
              border: 1px solid #ddd;
          	font-size:14px;
              color: #32373c;
          }
          QLineEdit:hover{
          border-color: #D2691E;
          border-radius:5px;
             
          }
          QGroupBox{background-color:rgba(255,255,255,0.5);border-style:none;}
          QPushButton
          {
          background-color: #4CAF50; /* Green */
              border: none;
              color: white;
              padding: 5px 10px;
              text-align: center;
              text-decoration: none;
              font-size: 12px;
          }</string>
              </property>
              <property name="title">
               <string/>
              </property>
              <widget class="QWidget" name="layoutWidget">
               <property name="geometry">
                <rect>
                 <x>10</x>
                 <y>20</y>
                 <width>411</width>
                 <height>51</height>
                </rect>
               </property>
               <layout class="QHBoxLayout" name="horizontalLayout">
                <item>
                 <widget class="QLabel" name="label">
                  <property name="text">
                   <string>Enter your password please:</string>
                  </property>
                 </widget>
                </item>
                <item>
                 <widget class="QLineEdit" name="txtPassword"/>
                </item>
                <item>
                 <widget class="QPushButton" name="btnEnter">
                  <property name="text">
                   <string>Enter</string>
                  </property>
                 </widget>
                </item>
               </layout>
              </widget>
             </widget>
             <widget class="QPushButton" name="btnMenu">
              <property name="geometry">
               <rect>
                <x>270</x>
                <y>350</y>
                <width>146</width>
                <height>45</height>
               </rect>
              </property>
              <property name="text">
               <string/>
              </property>
             </widget>
             <widget class="QLabel" name="lbl_text">
              <property name="geometry">
               <rect>
                <x>30</x>
                <y>340</y>
                <width>151</width>
                <height>17</height>
               </rect>
              </property>
              <property name="font">
               <font>
                <pointsize>-1</pointsize>
               </font>
              </property>
              <property name="styleSheet">
               <string notr="true">color:white;
          font-size:12px;</string>
              </property>
              <property name="text">
               <string>--------------------------</string>
              </property>
             </widget>
            </widget>
            <widget class="QMenuBar" name="menuBar">
             <property name="geometry">
              <rect>
               <x>0</x>
               <y>0</y>
               <width>726</width>
               <height>20</height>
              </rect>
             </property>
            </widget>
            <widget class="QToolBar" name="mainToolBar">
             <property name="styleSheet">
              <string notr="true">QLabel{color:white;font-size:12px;}</string>
             </property>
             <attribute name="toolBarArea">
              <enum>TopToolBarArea</enum>
             </attribute>
             <attribute name="toolBarBreak">
              <bool>false</bool>
             </attribute>
            </widget>
            <widget class="QStatusBar" name="statusBar"/>
           </widget>
           <layoutdefault spacing="6" margin="11"/>
           <resources/>
           <connections/>
          </ui>
          

          when I put breakpoints in main.cpp for '{' it shows me SIGABRT error.the line number3 show error. in qglobal.cpp

          0	__kernel_vsyscall			0xb7fdd424	
          1	__GI_raise		56	0xb6fd5827	
          2	__GI_abort		89	0xb6fd8c53	
          3	qt_message_output	qglobal.cpp	2266	0xb72e889d	
          4	qt_message	qglobal.cpp	2312	0xb72e8a47	
          5	qFatal	qglobal.cpp	2495	0xb72e8fb8	
          6	QWidgetPrivate::QWidgetPrivate	qwidget.cpp	213	0xb7693286	
          7	QDialogPrivate	qdialog_p.h	77	0xb7b82a1c	
          8	QMessageBoxPrivate	qmessagebox.cpp	143	0xb7b82a1c	
          9	QMessageBox::QMessageBox	qmessagebox.cpp	737	0xb7b82a1c	
          10	__static_initialization_and_destruction_0	mainwindow.cpp	9	0x804e3c4	
          11	_GLOBAL__sub_I_typing	mainwindow.cpp	188	0x804e424	
          12	__libc_csu_init			0x806ff52	
          13	__libc_start_main		246	0xb6fc0a1a	
          14	_start			0x804d3f1	
          

          qglobal.cpp

          
          #elif (defined(Q_OS_UNIX) || defined(Q_CC_MINGW))
                  abort(); // trap; generates core dump-------->>>> this is error line
          #else
          

          H.Ghassami

          1 Reply Last reply
          0
          • Chris KawaC Offline
            Chris KawaC Offline
            Chris Kawa
            Lifetime Qt Champion
            wrote on last edited by Chris Kawa
            #5

            You said you don't have static global QObjects and then there's this:

            //mainwindow.cpp
            
            ...
            QMessageBox msg;
            ...
            

            The error points you exactly to this line and says what the error is:

            10  __static_initialization_and_destruction_0   mainwindow.cpp  9   0x804e3c4
            

            That's it. Don't make static global QObjects.

            On a side note. You don't need to keep an instance of QMessageBox. It has convenience static methods to display warnings e.g. like this:

            QMessageBox::warning(this, tr("Login failed"), msgerror, QMessageBox::Ok);
            
            MhM93M 1 Reply Last reply
            1
            • Chris KawaC Chris Kawa

              You said you don't have static global QObjects and then there's this:

              //mainwindow.cpp
              
              ...
              QMessageBox msg;
              ...
              

              The error points you exactly to this line and says what the error is:

              10  __static_initialization_and_destruction_0   mainwindow.cpp  9   0x804e3c4
              

              That's it. Don't make static global QObjects.

              On a side note. You don't need to keep an instance of QMessageBox. It has convenience static methods to display warnings e.g. like this:

              QMessageBox::warning(this, tr("Login failed"), msgerror, QMessageBox::Ok);
              
              MhM93M Offline
              MhM93M Offline
              MhM93
              wrote on last edited by
              #6

              @Chris-Kawa really really thankssssss.
              How am I silly.
              So sorry. You say right. Excuse me for my poor knowledge.
              I think static object is like c#. : static int a;
              Cause of tho I said I don't have static. So sorry . Thanks boss. Really thanks.
              I love Qt.

              H.Ghassami

              1 Reply Last reply
              0
              • Chris KawaC Offline
                Chris KawaC Offline
                Chris Kawa
                Lifetime Qt Champion
                wrote on last edited by
                #7

                No problem. I'm glad I could help.
                In c++ static keyword has a different meaning in class member declarations and global variables. A variable declared in global scope always has static storage duration. A static keyword on such variable refers to the linkage.

                See here for more info.
                I'd stay away from global variables, Qt or otherwise. Although they have their uses they are usually nothing but trouble.

                kshegunovK 1 Reply Last reply
                1
                • Chris KawaC Chris Kawa

                  No problem. I'm glad I could help.
                  In c++ static keyword has a different meaning in class member declarations and global variables. A variable declared in global scope always has static storage duration. A static keyword on such variable refers to the linkage.

                  See here for more info.
                  I'd stay away from global variables, Qt or otherwise. Although they have their uses they are usually nothing but trouble.

                  kshegunovK Offline
                  kshegunovK Offline
                  kshegunov
                  Moderators
                  wrote on last edited by
                  #8

                  @Chris-Kawa
                  register was deprecated in C++11?! What a boomer ...

                  Read and abide by the Qt Code of Conduct

                  1 Reply Last reply
                  0
                  • MhM93M Offline
                    MhM93M Offline
                    MhM93
                    wrote on last edited by
                    #9

                    @Chris thanks. and thanks all.

                    H.Ghassami

                    1 Reply Last reply
                    0

                    • Login

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Categories
                    • Recent
                    • Tags
                    • Popular
                    • Users
                    • Groups
                    • Search
                    • Get Qt Extensions
                    • Unsolved